Рекомендуемый способ объявления свойств делегата с помощью ARC - PullRequest
31 голосов
/ 13 октября 2011

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

@property (assign) id<FooDelegate> delegate;

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

@property (weak) id<FooDelegate> delegate;

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

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

Ответы [ 2 ]

23 голосов
/ 13 октября 2011

Xcode 4 Refactor > Преобразование в 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.

22 голосов
/ 13 октября 2011

Используйте __unsafe_unretained вместо weak для проектов ARC, ориентированных на iOS 4 и 5. Единственное отличие состоит в том, что weak обнуляет указатель при освобождении и поддерживается только в iOS 5.

Ваш другойответ на вопрос Почему делегатам Objective-C обычно присваивается свойство, а не сохраняется? .

...