2011-12-20 1 views
2

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

+0

Вы когда-нибудь это выясняли. Я знаю, что ответы ниже правильные. Но если вы видели это своими глазами, невероятно, что хранение NSNumber, а затем создание NSArray, удерживающего это значение, сокращает массив пополам во время выполнения. никогда бы я не подумал, что это так, но это именно то, что было сделано во время выполнения. – cynistersix

+0

Ответы ниже правильные. IDE перепуталась и не обновила наблюдаемые значения. – cynistersix

ответ

2

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

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

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

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

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

5

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

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

[mutableArray addObject:anObject]; 

поднимает NSInvalidArgumentException если anObject равна нулю.

1
NSMutableArray *a = [NSMutableArray array]; 
[a addObject:[NSNumber numberWithInt:0]]; 
NSLog(@"count: %d", a.count); 

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

  • Нет связанных вопросов^_^