ARC: как мне разобраться в конце жизненного цикла объекта? - PullRequest
0 голосов
/ 02 марта 2012

Я пытаюсь осмыслить жизненный цикл объектов при использовании ARC. По сути, я не могу найти, как лучше всего управлять объектами, когда они объявлены глобально в файле .h:

@interface MyClass : UIViewController {
    NSArray *arrayA;
}

@property (strong) NSArray *arrayB;

Теперь, насколько я понимаю, и arrayA, и arrayB объявлены как сильные, поэтому они будут освобождены, когда для них установлено значение = nil или изменено для указания на другой объект. Они также получают, когда объект MyClass выпущен? Или я должен переопределить dealloc и установить их все на ноль? Я предполагаю, что свойство будет освобождено, а arrayA - нет.

Использование свойств для всего не имеет смысла для меня. Каков наилучший способ иметь сохраненный объект, который мне нужно использовать из разных методов в коде, но сохранять его закрытым?

Ответы [ 2 ]

3 голосов
/ 02 марта 2012

Выпускаются ли они также при освобождении объекта MyClass?

Нет. Они будут освобождены автоматически, когда объект MyClass будет освобожден. Но это хорошо, и это то, что вы хотите.

Использование свойств для всего не имеет смысла для меня. Каков наилучший способ иметь сохраненный объект, который мне нужно использовать из разных методов в коде, но сохранять его закрытым?

Вы можете использовать переменную экземпляра напрямую. ARC вставит необходимые сохранения / релизы, чтобы все это заработало.

0 голосов
/ 21 сентября 2012

На самом деле, я думаю, что вы ищете частную собственность. Объявите их в вашем файле .m, используя закрытый @interface как это:

@interface myClass()
@property (strong, nonatomic) NSArray *arrayWithSemanticName;
@end

@implementation myClass
// my class goes here
...
@end

:)

Edit:

Он также работает с Interface Builder, устанавливая их как IBOutlets, а IBActions работает просто отлично, как перетаскивание их из IB.

...