IBOutlet для NSTextView в проекте ARC
Как вы читаете здесь, в большинстве случаев IBOutlet
должен быть слабым.
Теперь, когда вы можете читать в библиотеку разработки, не все классы поддерживают слабые ссылки.
(например, NSTextView). Это означает, что вам нужно использовать назначение:
@property (assign) IBOutlet NSTextView *textView;
Если вы используете слабую ссылку, вы получите следующую ошибку:
"Синтез слабодоступного свойства запрещен, потому что он требует синтеза ивара объекта __weak"
В документации, о которой не упоминалось, теперь нужно снова установить свойство nil после его использования, например. по методу dealloc
:
- (void)dealloc
{
self.textView = nil;
}
Насколько я понял, классы, отмеченные NS_AUTOMATED_REFCOUNT_WEAK_UNAVAILABLE
, не поддерживают слабые ссылки, но в чем причина?
Ответы
Ответ 1
Я думаю, я нашел причину, почему некоторые классы не поддерживают слабую ссылку:
Как вы можете прочитать здесь:
Обоснование: исторически было возможно, чтобы класс предоставил свою собственную реализацию ссылок-ссылок, переопределив сохранение, выпуск и т.д. Однако слабые ссылки на объект требуют координации с его реализацией класса-ссылки класса, поскольку, среди прочих вещи, слабые нагрузки и магазины должны быть атомарными относительно окончательной версии. Таким образом, существующие пользовательские схемы отсчета, как правило, не будут поддерживать слабые ссылки без дополнительных усилий. Это неизбежно, не нарушая двоичную совместимость.