Как использовать делегатов с автоматическим подсчетом ссылок
Я прыгнул на подножку ARC. Раньше у меня были бы права на свойства делегата следующим образом:
@property(assign) id<MyProtocol> delegate;
Итак, я думал, что сделаю это под ARC:
@property(weak) id<MyProtocol> delegate;
Не так. В операторе @synthesize в .m у меня есть компиляция error:
* Семантический выпуск: существующий ivar 'delegate' для __weak property 'delegate' должен быть __weak *
Я объявил это слабым! Также как передать класс, реализующий протокол, в свойство с низкой ссылкой. Должен ли я обернуть его в один из этих странных вызовов obj_unretained?
Любая помощь по этому поводу была бы очень оценена.
Ответы
Ответ 1
"ivar" означает "переменная экземпляра", которую вы не указали. Я уверен, что это выглядит примерно так:
@interface Foo : NSObject {
id delegate;
}
@property (weak) id delegate;
Что означает ошибка, так это то, что он должен выглядеть так:
@interface Foo : NSObject {
__weak id delegate;
}
@property (weak) id delegate;
Если свойство утверждает, что оно слабое, ivar, в котором значение сохраняется, также должно быть слабым.