Делегаты - сохранить или назначить - освободить?

Я видел несколько сообщений, связанных с делегатами, и хотел бы знать, как правильно на них ссылаться. Предположим, у меня есть объект, объявленный как:

@interface MyViewController : UITableViewController {
    id delegate;    
}
@property (nonatomic, retain) id delegate;
@end

На протяжении жизненного цикла MyViewController , он будет вызывать методы своего делегата в ответ на взаимодействие с пользователем.

Когда пришло время избавиться от экземпляра MyViewController , нужно ли делегату ivar быть релизом в методе реализации dealloc , поскольку он объявлен с помощью keep ?

Или, наоборот, должен ли делегат быть сохранил? Возможно, это должен быть делегат идентификатора @property (nonatomic, assign) ? Согласно документации Apple :

сохранить ... Вы обычно используете этот атрибут для скалярных типов, таких как NSInteger и CGRect, или (в среде с подсчетом ссылок) для объектов, которыми вы не владеете, например делегаты.

Обычно я бы просто согласился с тем, что говорят документы, но я ' мы видели много кода, который вызывает keep для делегата. Это просто «плохой код»? Я полагаюсь на экспертов ... Как правильно с этим справиться?

13
задан Arun_ 31 December 2013 в 10:40
поделиться