Подтвердить что ты не робот

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

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

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

@property (assign) IBOutlet NSTextView *textView;

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

В документации, о которой не упоминалось, теперь нужно снова установить свойство nil после его использования, например. по методу dealloc:

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

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

4b9b3361

Ответ 1

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

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

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