Рекомендуемый способ объявления свойств делегата с помощью ARC
Я использовал для объявления всех свойств делегата как
@property (assign) id<FooDelegate> delegate;
У меня создалось впечатление, что все свойства присваивания теперь должны быть слабыми указателями, верно ли это?
Если я попытаюсь объявить как:
@property (weak) id<FooDelegate> delegate;
Я получаю сообщение об ошибке при попытке @synthesize (автогенерируемые слабые свойства не поддерживаются).
Какая наилучшая практика в этом случае?
Ответы
Ответ 1
Используйте __unsafe_unretained
вместо weak
для проектов ARC, ориентированных на iOS 4 и 5. Единственное отличие состоит в том, что weak
игнорирует указатель при освобождении и поддерживается только в iOS 5.
На ваш другой вопрос отвечает Почему делегатам Objective-C обычно присваивается присваивание свойства вместо сохранения?.
Ответ 2
Xcode 4 Рефакторинг > Преобразовать в Objective-C ARC:
@interface XYZ : NSObject
{
id delegate;
}
@property (assign) id delegate;
...
@synthesize delegate;
в
@interface XYZ : NSObject
{
id __unsafe_unretained delegate;
}
@property (unsafe_unretained) id delegate;
...
@synthesize delegate;
Если я правильно помню, это также упоминается в видео WWDC 2011 о ARC.