Как узнать, выпущен ли делегат ios - PullRequest
1 голос
/ 06 мая 2011

Я широко использую делегирование для структуры VIEW - CONTROL - MODEL. Обычно объекты CONTROL & MODEL сохраняются во время работы приложения, вызывая небольшие проблемы.

Однако объекты VIEW, которые часто являются экземплярами UIViewController, выделяются и освобождаются много раз.

Установка nil для объекта делегата, которому назначается динамический экземпляр UIViewController, когда он освобождается, - это один из способов избежать ошибки EXC_BAD_ACCESS.

Однако, даже если я всегда использую:

if ([delegate respondsToSelector:@selector(communityModel:finishedDeletingComment:)]) {
    [delegate communityModel:self finishedDeletingComment:succeeded];
}

это не идеально для предотвращения ошибок. Если разные объекты VIEW совместно используют одного или ограниченное число делегатов объекта CONTROL, всегда есть вероятность непреднамеренной замены делегатов другим, что вызывает EXC_BAD_ACCESS

Есть ли лучший способ управления делегатами, чтобы узнать, действительно ли он доступен в момент вызова методов делегатов?

Я сомневаюсь, что мой обычный способ установки свойств для делегата должен быть изменен. Я использую этот способ для установки свойств делегата:

@property (nonatomic, assign) id<ControlDelegate> delegate;

Собираюсь ли я на правильный путь, сомневаясь в настройке свойства?

1 Ответ

0 голосов
/ 06 мая 2011

Я объявляю делегатов свойствами assign, когда мой объект (который будет использовать делегат) является членом делегата или членом делегата и т. Д. В этом случае свойство retain приведет к утечке памяти.В других местах я не вижу причин, чтобы не удерживать делегата.Если это приемлемо для вас - попробуйте объявить вашу собственность как:

@property (nonatomic, retain) id<ControlDelegate> delegate;
...