NSNumber = 0 в изменяемом массиве - PullRequest
2 голосов
/ 20 декабря 2011

Если я сохраню NSNumber, равное 0 в NSMutableArray, будет ли это интерпретировано как nil и вызовет проблемы с методом подсчета?

Ответы [ 3 ]

5 голосов
/ 20 декабря 2011

Увеличивает счетчик массива.
[NSNumber numberWithInt:0]
является объектом и не равен nil.

Кроме того, вы не можете добавить nil в массив

[mutableArray addObject:anObject];

вызывает NSInvalidArgumentException, если anObject равен nil.

2 голосов
/ 20 декабря 2011

Нет, вы должны различать сам идентификатор объекта и его содержимое.Содержимое NSNumber, установленное в 0, вполне может быть нулевым, но id для указанного объекта на самом деле является реальным адресом.

Например, идентификатор объекта 0x2222 может выглядеть следующим образомэто в памяти (очень упрощенно):

           +--------+
0x2222 --> | 0x0000 |
           +--------+

Вы можете видеть, что идентификатор объекта не ноль, а реальное значение. содержимое объекта равно нулю, но это не относится к идентификатору объекта.

В массиве с переменными значениями находятся значения идентификаторов для объектов, а не содержимое этих объектов.

1 голос
/ 20 декабря 2011
NSMutableArray *a = [NSMutableArray array];
[a addObject:[NSNumber numberWithInt:0]];
NSLog(@"count: %d", a.count);
...