2010-01-28 4 views

ответ

9

Метод NSArray initWithCapacity принимает в качестве аргумента unsigned int. Так что любое максимальное значение unsigned int на вашей платформе может быть теоретическим пределом. Однако фактический предел, скорее всего, будет зависеть от объема доступной памяти.

+4

'NSUInteger', не' без знака int'. В 64-битных архитектурах 'unsigned int' по-прежнему 4 байта, тогда как' NSUInteger', что NSArray использует с тех пор, как Leopard-is 8. –

+2

Неверно предположить, что максимальное количество объектов NSUIntegerMax. Как указывает jsmp, NSArray использует NSNotFound. NSNotFound определяется как NSIntegerMax, который меньше, чем NSUInteger. Это означает, что максимальное количество объектов - NSIntegerMax-1. Я бы испытал это, как предлагает Дейв Делонг, но я убегаю, если память! –

+0

Надеюсь, у вас достаточно ОЗУ, чтобы хранить в 180 раз больше информации, чем Lt. Cmd. Данные! http://www.wolframalpha.com/input/?dataset=&i=(1*(2%5E64)+%2B+8+%2B+8)+bytes –

3

Вероятно, больше, чем может обрабатывать ваша оперативная память.

1

NSArray - это контейнер указателей на другие объекты. Его максимальная мощность определяется NSUInteger (на последних версиях доступных операционных систем):

При создании 32-разрядных приложений, NSUInteger является 32-разрядное беззнаковое целое число . 64-битное приложение обрабатывает NSUInteger в качестве 64-битового целого числа без знака

Поэтому, независимо от размера NSUInteger на данном устройстве является максимальное количество указателей объектов он может содержать. Однако, как упоминал Эймантас в своем ответе, это не то же самое, что «сколько объектов можно удерживать», потому что это зависит от доступной памяти. В определенный момент времени вам может не хватить достаточного количества оперативной памяти для размещения массива с шестью миллиардами слотов, например ...

5

В большинстве случаев относительно верхних пределов структур программирования и т.п.:
«Если вы должны спросить , вы, вероятно, ошибаетесь »- TheDailyWTF.com

10

Вы пытались это выяснить? ;)

NSMutableArray * a = [[NSMutableArray alloc] init]; 
NSUInteger i = 0; 
@try { 
    while (1) { 
    [a addObject:@"hi"]; 
    i++; 
    } 
} @catch (NSException * e) { 
    NSLog(@"added %llu elements", i); 
} 
+0

Delong, пробовав вашу идею и узнав ограничение по размеру , это приложение вылетает и получает ошибку в качестве сигнала приема программы: «0». Форматы данных временно недоступны, повторите попытку после продолжения.(Неизвестная ошибка загрузки разделяемой библиотеки "/Developer/usr/lib/libXcodeDebuggerSupport.dylib") –

+3

у вас закончилась нехватка памяти. просто запишите, что я есть на каждой итерации, и пусть он падает, последний журнал расскажет вам, сколько вы могли бы получить. Кстати, ваш тест говорит, что размер ограничен только памятью. –

3

NSNotFound определяется как NSIntegerMax изменения (это значение, если вы находитесь на 32-битной или 64-битной системы)

NSNotFound также результат, который вы получаете, когда вы делаете

[NSArray indexOfObject: OBJ]

и объект не найден.

Если у вас не закончилось пространство/память, я бы сказал, что это будет ваш лимит.

http://developer.apple.com/library/mac/#documentation/cocoa/reference/foundation/Miscellaneous/Foundation_Constants/Reference/reference.html

Смежные вопросы