ObjC автоматический подсчет ссылок (ARC): слабый против присвоения против unsafe_unretained для делегата?
У меня есть класс:
@interface MyClass : NSObject
@property (weak) id delegate;
@end
и реализация:
@implementation MyClass
@synthesize delegate;
@end
Когда я реорганизую код для ARC, он говорит мне, что синтезировать "слабое" свойство разрешено только в режиме ARC/GC. Но из того, что я знаю, делегат может быть "слабым" в ARC, а также, если я изменю его на присвоение, он будет преобразован в unsafe_unretained.
Мой вопрос: означает ли это, что код перед преобразованием (в ARC) НЕ должен использовать ARC?
Спасибо!
1 ответ
Похоже, вы ориентируетесь на iOS 4.x
4.x добавил ARC, но не полный ARC, который получил iOS5+. В дуге iOS 4.x нет поддержки "слабого" ключевого слова, только unsafe_unretained. Если вы хотите использовать слабый вместо unsafe_retained, вам придется отказаться от поддержки iOS 4.
Разница между "слабым" и "unsafe_unretained" заключается в том, что "слабый" при установке будет равен нулю, а unsafe_unretained будет указывать на плохую (освобожденную) память.