Максимальное количество объектов в NSArray - PullRequest
7 голосов
/ 28 января 2010

Какое наибольшее количество объектов я могу поместить в свой NSArray?

Ответы [ 6 ]

10 голосов
/ 28 января 2010

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

NSMutableArray * a = [[NSMutableArray alloc] init];
NSUInteger i = 0;
@try {
  while (1) {
     [a addObject:@"hi"];
     i++;
  }
} @catch (NSException * e) {
  NSLog(@"added %llu elements", i);
}
9 голосов
/ 28 января 2010

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

5 голосов
/ 28 января 2010

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

3 голосов
/ 12 апреля 2011

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

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

[nsarray indexOfObject: obj]

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

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

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

3 голосов
/ 28 января 2010

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

1 голос
/ 28 января 2010

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

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

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

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