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 и т. Д. Однако слабые ссылки на объект требуют координации с реализацией подсчета ссылок его класса, поскольку, среди прочего, слабая грузы и хранилища должны быть атомарными относительно окончательного выпуска. Поэтому существующие пользовательские реализации подсчета ссылок обычно не поддерживают слабые ссылки без дополнительных усилий. Это неизбежно без нарушения бинарной совместимости.