Подтвердить что ты не робот

Objective-C Делегаты с ARC

Я пишу класс, который имеет обратные вызовы для объекта делегата, но у меня проблемы с ARC.

например. У меня есть ObjectA (делегат), который соответствует ProtocolA и ObjectB, который является объектом, который обращается к делегату. Я сохраняю ObjectA как @property в ObjectB.

В этой ситуации переменные должны быть сильными и должны быть слабыми ссылками? Мне нужно избегать ситуации, когда передача "я" из ObjectA в ObjectB для задания результата делегирования приводит к удалению от сильного до слабого указателя.

4b9b3361

Ответ 1

Чтобы избежать циклических ссылок, сохраните делегат ObjectB в качестве слабой ссылки. Поскольку ObjectA "принадлежит" ObjectB, ObjectA не должен быть выпущен, в то время как ObjectB имеет ссылку на него. Поэтому пишите:

    @property (weak, nonatomic) id <ObjectBDelegate> delegate;

Ответ 2

Свойства делегата обычно должны быть слабыми. Объект, который передает сообщения делегату, не "владеет" делегатом, на самом деле это обычно наоборот.