IBOutlet for NSTextView in a ARC project



正如你在这里读到的,在大多数情况下,IBOutlet应该是弱的。

现在,正如您在开发库中读到的那样,并非所有类都支持弱引用。(例如 NSTextView)。这意味着您必须使用分配:

@property (assign) IBOutlet NSTextView *textView;

如果使用弱引用,将收到以下错误:"不允许合成弱不可用属性,因为它需要合成__weak对象的 ivar"

文档遗漏提及的是,现在您必须在使用后再次将属性设置为 nil,例如通过dealloc方法:

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

据我了解,标有NS_AUTOMATED_REFCOUNT_WEAK_UNAVAILABLE的类不支持弱引用,但原因是什么?

我想我找到了某些类不支持弱引用的原因:

正如你可以在这里读到的:

理由:从历史上看,类可以通过覆盖保留、释放等来提供自己的引用计数实现。但是,对对象的弱引用需要与其类的引用计数实现进行协调,因为除其他事项外,弱加载和存储相对于最终版本必须是原子的。因此,现有的自定义引用计数实现通常不支持弱引用,而无需额外的努力。在不破坏二进制兼容性的情况下,这是不可避免的。

相关内容

  • 没有找到相关文章

最新更新