【问题标题】:How can I create an empty array in objective C, and assign value into it one by one?如何在目标 C 中创建一个空数组,并一一为其赋值?
【发布时间】:2011-01-21 01:34:38
【问题描述】:
在 Java 中,我可以做到这一点:
int[] abc = new int[10];
for(int i=0; i<abc.length; i++){
abc[i] = i;
}
如何在 Objective C 中实现类似的东西?
我看到一些使用 NSMutableArray 的答案,这和 NSArray 之间的重量不同?
【问题讨论】:
标签:
objective-c
arrays
programming-languages
for-loop
【解决方案1】:
试试这样的。
#import <foundation/foundation.h>
int main (int argc, const char * argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSMutableArray *myArray = [NSMutableArray array];
[myArray addObject:@"first string"];
[myArray addObject:@"second string"];
[myArray addObject:@"third string"];
int count = [myArray count];
NSLog(@"There are %d elements in my array", count);
[pool release];
return 0;
}
循环看起来像:
NSString *element;
int i;
int count;
for (i = 0, count = [myArray count]; i < count; i = i + 1)
{
element = [myArray objectAtIndex:i];
NSLog(@"The element at index %d in the array is: %@", i, element);
}
见CocoLab
【解决方案2】:
NSMutableArray* abc = [NSMutableArray array];
for (int i = 0; i < 10; ++ i)
[abc addObject:[NSNumber numberWithInt:i]];
return abc;
这里,
- NSMutableArray 是一种“可变”数组类型。还有一个常量数组超类型 NSArray。与 C++ 不同,ObjC 的数组没有类型。您可以将任何 ObjC 对象存储在 NSArray 中。
-
-addObject: 在数组末尾追加一个 ObjC。
- 由于 NSArrays 只能存储 ObjC,因此您必须先将整数“装箱”到 NSNumber 中。
这其实更类似于C++代码
std::vector<int> abc;
for (int i = 0; i < 10; ++ i)
abc.push_back(i);
return abc;
【解决方案3】:
我看到一些答案使用
NSMutableArray,wt之间的不同
这个和NSArray?
NSArray 是不可变的:它无法更改。 NSMutableArray 是一个可变的子类,它向数组接口添加了允许操作其内容的方法。这种模式在 Cocoa 的许多地方都可以看到:NSString、NSSet 和 NSDictionary 是特别常见的示例,它们都是具有可变子类的不可变对象。
这样做的最大原因是效率。您可以对不可变对象做出关于内存管理和线程安全的假设,而您无法对可能从您下面改变的对象做出假设。