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

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

12 голосов
/ 08 ноября 2011

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

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

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

Ответы [ 2 ]

22 голосов
/ 08 ноября 2011

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

    @property (weak, nonatomic) id <ObjectBDelegate> delegate;
8 голосов
/ 08 ноября 2011

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

...