Подтвердить что ты не робот

Рекомендуемый способ объявления свойств делегата с помощью ARC

Я использовал для объявления всех свойств делегата как

@property (assign) id<FooDelegate> delegate;

У меня создалось впечатление, что все свойства присваивания теперь должны быть слабыми указателями, верно ли это? Если я попытаюсь объявить как:

@property (weak) id<FooDelegate> delegate;

Я получаю сообщение об ошибке при попытке @synthesize (автогенерируемые слабые свойства не поддерживаются).

Какая наилучшая практика в этом случае?

4b9b3361

Ответ 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.