正如你在这里读到的,在大多数情况下,IBOutlet
应该是弱的。
现在,正如您在开发库中读到的那样,并非所有类都支持弱引用。(例如 NSTextView)。这意味着您必须使用分配:
@property (assign) IBOutlet NSTextView *textView;
如果使用弱引用,将收到以下错误:"不允许合成弱不可用属性,因为它需要合成__weak对象的 ivar"
文档遗漏提及的是,现在您必须在使用后再次将属性设置为 nil,例如通过dealloc
方法:
- (void)dealloc
{
self.textView = nil;
}
据我了解,标有NS_AUTOMATED_REFCOUNT_WEAK_UNAVAILABLE
的类不支持弱引用,但原因是什么?
我想我找到了某些类不支持弱引用的原因:
正如你可以在这里读到的:
理由:从历史上看,类可以通过覆盖保留、释放等来提供自己的引用计数实现。但是,对对象的弱引用需要与其类的引用计数实现进行协调,因为除其他事项外,弱加载和存储相对于最终版本必须是原子的。因此,现有的自定义引用计数实现通常不支持弱引用,而无需额外的努力。在不破坏二进制兼容性的情况下,这是不可避免的。