Я видел несколько сообщений, связанных с делегатами, и хотел бы знать, как правильно на них ссылаться. Предположим, у меня есть объект, объявленный как:
@interface MyViewController : UITableViewController {
id delegate;
}
@property (nonatomic, retain) id delegate;
@end
На протяжении жизненного цикла MyViewController
, он будет вызывать методы своего делегата в ответ на взаимодействие с пользователем.
Когда пришло время избавиться от экземпляра MyViewController
, нужно ли делегату
ivar быть релизом
в методе реализации dealloc
, поскольку он объявлен с помощью keep
?
Или, наоборот, должен ли делегат
быть сохранил? Возможно, это должен быть делегат идентификатора @property (nonatomic, assign)
? Согласно документации Apple :
сохранить ... Вы обычно используете этот атрибут для скалярных типов, таких как NSInteger и CGRect, или (в среде с подсчетом ссылок) для объектов, которыми вы не владеете, например делегаты.
Обычно я бы просто согласился с тем, что говорят документы, но я ' мы видели много кода, который вызывает keep
для делегата. Это просто «плохой код»? Я полагаюсь на экспертов ... Как правильно с этим справиться?