Ваша путаница проистекает из двух отдельных понятий: свойства Objective-C 2.0 и управление памятью.
Использование функции назначения или сохранения полностью зависит от того, что вы пытаетесь сделать, и от того, используете ли вы сборщик мусора. Например, если вы не используете сборщик мусора и используете assign, то установите для массы значение [NSNumber numberWithInt:0]
, ваш (автоматически выпущенный) экземпляр NSNumber
исчезнет, и у вас будут проблемы в следующий раз, когда вы попытаетесь его использовать. .
Что касается того, сколько выпусков вам нужно во втором блоке кода, вам действительно необходимо (пере) прочитать документацию по управлению памятью. Если вы создали объект (с помощью методов, упомянутых в документации), вы несете ответственность за его освобождение. Вот и все. Сохраняет ли это что-то еще или нет - это не ваше дело. Итак, следуя этой логике, если ваше массовое свойство сохраняет (и правильно высвобождает) свое значение (и оно будет, если вы будете использовать @synthesize
или следовать надлежащим примерам установки средства доступа), оно прекрасно справляется со своей собственной задачей. Опять же, если вы создаете объект, вы несете ответственность за его освобождение. Другие могут удерживать / освобождать объект по мере необходимости, но это вас не беспокоит.
Кроме того, [[NSNumber alloc] numberWithInt:5]
не так. Вы выделяете / инициализируете ... но не выделяете, а затем вызываете вспомогательный метод (который, вероятно, будет выделять / инициализировать ... сам экземпляр).