Если я сохраняю NSNumber
, равный 0 в NSMutableArray
, это будет интерпретироваться как nil
и вызвать проблемы со способом подсчета?NSNumber = 0 в изменяемой матрице
2
A
ответ
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);
Вы когда-нибудь это выясняли. Я знаю, что ответы ниже правильные. Но если вы видели это своими глазами, невероятно, что хранение NSNumber, а затем создание NSArray, удерживающего это значение, сокращает массив пополам во время выполнения. никогда бы я не подумал, что это так, но это именно то, что было сделано во время выполнения. – cynistersix
Ответы ниже правильные. IDE перепуталась и не обновила наблюдаемые значения. – cynistersix