在Java中,我可以这样做:
int[] abc = new int[10];
for(int i=0; i<abc.length; i++){
abc[i] = i;
}
我该如何在Objective C中实现类似的东西?
我看到有些答案使用NSMutableArray,那么它和NSArray有什么不同吗?
在Java中,我可以这样做:
int[] abc = new int[10];
for(int i=0; i<abc.length; i++){
abc[i] = i;
}
我该如何在Objective C中实现类似的东西?
我看到有些答案使用NSMutableArray,那么它和NSArray有什么不同吗?
试试像这样。
#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
NSMutableArray* abc = [NSMutableArray array];
for (int i = 0; i < 10; ++ i)
[abc addObject:[NSNumber numberWithInt:i]];
return abc;
这里,
-addObject:
将一个ObjC追加到数组末尾。实际上,这更类似于C++代码。
std::vector<int> abc;
for (int i = 0; i < 10; ++ i)
abc.push_back(i);
return abc;
我看到有些答案使用了
NSMutableArray
,那么这个和NSArray
有什么不同呢?
NSArray
是不可变的:它不能被更改。NSMutableArray
是一个可变的子类,并添加了方法来允许对其内容进行操作。在Cocoa中,这是许多地方都看到的模式:NSString
、NSSet
和NSDictionary
都是特别频繁的例子,它们都是不可变对象,有可变的子类。
这样做的最大原因是效率。您可以对不可变对象做出内存管理和线程安全的假设,而对于可能在您下面更改的对象则不行。