Ответ 1
В некоторой симметрии с вашим более ранним вопросом NSNumber
- это тип объекта. Вам необходимо создать его с помощью вызова метода, например:
[p setAge:[NSNumber numberWithInt:10]];
Ваш текущий код пытается просто передать произвольное целое число 10
указателю. Никогда делать это: если компилятор не предупредил вас об этом, вы попытались бы получить доступ к некоторым совершенно несоответствующим байтам в ячейке памяти 10
, как если бы это был объект NSNumber
, который их не было бы. Выполнение этого материала приводит к слезам.
О, и просто для того, чтобы упредить следующие очевидные проблемы, помните, что если вы хотите использовать значение в объекте NSNumber
, вам также нужно получить это через вызовы методов, например:
if ( [[p age] intValue] < 18 )
...
(NSNumber
является неизменным, и я думаю, что он реализован таким образом, что идентичные значения сопоставляются с одним и тем же объектом. Поэтому, вероятно, можно избежать прямых сравнений указателей для равенства значений между объектами NSNumber
. Но , пожалуйста, не, потому что это будет нецелесообразно полагаться на детали реализации. Вместо этого используйте isEqual
.)