2011-05-06 2 views
1

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

Однако объекты 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; 

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

ответ

0

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^