IBOutlet для NSTextView в проекте ARC

Как вы читаете здесь, в большинстве случаев IBOutlet должен быть слабым.

Теперь, как вы можете прочитать в библиотеке разработки, не все классы поддерживают слабые ссылки. (например, NSTextView). Это означает, что вы должны использовать assign:

@property (assign) IBOutlet NSTextView *textView;

Если вы используете слабую ссылку, вы получите следующую ошибку: "Синтез слабого недоступного свойства запрещен, потому что он требует синтеза ивара __weak объекта"

Что упущено в документации, так это то, что теперь вы должны снова установить свойство равным nil после его использования, например dealloc метод:

- (void)dealloc
{
    self.textView = nil;
} 

Насколько я понял, классы отмечены NS_AUTOMATED_REFCOUNT_WEAK_UNAVAILABLE не поддерживает слабые ссылки, но в чем причина?

1 ответ

Решение

Я думаю, что нашел причину, по которой некоторые классы не поддерживают слабую ссылку:

Как вы можете прочитать здесь:

Обоснование: исторически сложилось так, что класс имел возможность обеспечить собственную реализацию подсчета ссылок путем переопределения retain, release и т. Д. Однако слабые ссылки на объект требуют координации с реализацией подсчета ссылок его класса, поскольку, среди прочего, слабая грузы и хранилища должны быть атомарными относительно окончательного выпуска. Поэтому существующие пользовательские реализации подсчета ссылок обычно не поддерживают слабые ссылки без дополнительных усилий. Это неизбежно без нарушения бинарной совместимости.

Другие вопросы по тегам