目标C中NSMutableArray的大小?

时间:2010-09-24 04:10:21

标签: objective-c nsmutablearray

我想问一下NSMutable Array的大小可以是2000吗?如果没有,是否可以打开一个数组来存储2000个元素。元素是用户定义的对象。谢谢。

1 个答案:

答案 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"];

不会导致错误。