我想问一下NSMutable Array的大小可以是2000吗?如果没有,是否可以打开一个数组来存储2000个元素。元素是用户定义的对象。谢谢。
答案 0 :(得分:1)
答案是NSMutableArray始终以零大小开头。如果你想要它,你可以做这样的事情:
NSMutableArray* anArray = [NSMutableArray arrayWithSize: 2000];
[anArray replaceObjectAtIndex: 1999 withObject: foo];
您需要使用NSNull对象预填充数组,例如
@implementation NSArray(MyArrayCategory)
+(NSMutableArray*) arrayWithSize: (NSUInteger) size
{
NSMutableArray* ret = [[NSMutableArray alloc] initWithCapacity: size];
for (size_t i = 0 ; i < size ; i++)
{
[ret addObject: [NSNull null]];
}
return [ret autorelease];
}
@end
编辑:进一步澄清:
-initWithCapacity:
提供了一个关于运行时间的提示,表明您认为该阵列有多大。运行时没有义务直接实际分配该数量的内存。
NSMutableArray* foo = [[NSMutableArray alloc] initWithCapacity: 1000000];
NSLog(@"foo count = %ld", (long) [foo count]);
将记录0的计数。
-initWithCapacity:
不限制数组的大小:
NSMutableArray* foo = [[NSMutableArray alloc] initWithCapacity: 1];
[foo addObject: @"one"];
[foo addObject: @"two"];
不会导致错误。