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