Ваш код неверен и может привести к сбою.В своем коде он вызывает alloc
, что означает, что счетчик сохранения равен 1. Затем он присваивает его свойству.Я предполагаю, что это свойство объявлено равным retain
, и в этом случае счет удержания увеличится до 2. Затем он вызвал release
, что уменьшает счет удержания до 1.
В вашемкод, вы вызываете alloc
, что означает, что счетчик хранения равен 1, затем вы вызываете autorelease
, что означает, что счетчик хранения уменьшится до 0, и память объекта будет вскоре освобождена.Вы присваиваете объект переменной экземпляра, а не сохраняемому свойству, как он делает, так что вы больше не будете увеличивать счет.Это означает, что у вас останется висячий указатель на память, который может быть перезаписан чем-либо другим в любое время.При попытке получить доступ к listData
произойдет сбой, поскольку он, вероятно, был перезаписан.
Прочтите Руководство по программированию управления памятью , если вы не понимаете, что здесь происходит.
Сказав это, суть вашего вопроса верна.Ничто не мешает ему делать то же самое, что и вы, кроме присвоения сохраненного свойства вместо переменной экземпляра.