Безопасно ли присваивать свойство результату инициализатора с автоматическим выпуском при использовании ARC? - PullRequest
5 голосов
/ 18 января 2012

Допустим, у меня есть сильное свойство, подобное этому:

  @interface Foo
    @property (strong, nonatomic) NSArray *myArray;
  @end

И в моем инициализаторе я установил myArray так:

myArray = [NSArray array];

Это безопасно? Будет ли ARC позаботиться о надлежащем сохранении myArray для меня?

Причина, по которой я спрашиваю, состоит в том, что у меня есть проект, в котором myArray не должным образом сохраняется в этом сценарии, и я получаю плохой доступ к памяти в будущем.

Но, если я использую

 myArray = [[NSArray alloc] init];

тогда все хорошо.

1 Ответ

7 голосов
/ 18 января 2012

Да, ARC автоматически сохранит его для вас.

Способ думать о ARC таков: если у вас есть сильный указатель на объект, то он гарантированно останется в живых. Когда все указатели (ну, все сильные указатели) на объект уходят, объект умрет.

Из описания вашей проблемы кажется, что ARC неправильно включен в файле, в котором вы выполняете этот код. В любом случае, я бы порекомендовал запустить ваше приложение с инструментами, используя шаблон «Зомби». Это позволит вам увидеть полную историю сохранения / выпуска этого объекта, и вы сможете определить, где что-то идет не так.

...