Размер массива NSMutable в цели C? - PullRequest
0 голосов
/ 24 сентября 2010

Я хочу спросить, может ли размер NSMutable Array быть 2000?Если нет, то можно ли открыть массив для хранения 2000 элементов.Элементы это пользовательский объект.Спасибо.

1 Ответ

1 голос
/ 24 сентября 2010

Ответ заключается в том, что 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. 0. 1013 *

-initWithCapacity: не ограничивает размер массива:

    NSMutableArray* foo = [[NSMutableArray alloc] initWithCapacity: 1];
    [foo addObject: @"one"];
    [foo addObject: @"two"];

не вызывает ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...