ARC项目中的NSTextView的IBOutlet

Ste*_*han 21 weak nstextview iboutlet automatic-ref-counting

当你读到这里在大多数情况下,IBOutlet应该是弱.

现在,您可以在开发库中阅读并非所有类都支持弱引用.(例如NSTextView).这意味着您必须使用assign:

@property (assign) IBOutlet NSTextView *textView;
Run Code Online (Sandbox Code Playgroud)

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

文档错过的内容是现在你必须在使用后再将属性设置为nil,例如通过一种dealloc方法:

- (void)dealloc
{
    self.textView = nil;
} 
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*han 13

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

你可以在这里阅读:

基本原理:从历史上看,类可以通过覆盖保留,释放等来提供自己的引用计数实现.但是,对对象的弱引用需要与其类的引用计数实现协调,因为除其他外,弱加载和存储必须是最终版本的原子.因此,现有的自定义引用计数实现通常不支持弱引用而无需额外的工作.如果不打破二进制兼容性,这是不可避免的.