在大多数情况下阅读here时,IBOutlet
应该很弱。
现在您可以阅读development library并非所有类都支持弱引用。 (例如NSTextView)。这意味着您必须使用assign:
@property (assign) IBOutlet NSTextView *textView;
如果使用弱引用,则会出现以下错误: “不允许合成弱不可用属性,因为它需要合成__weak对象的ivar”
文档错过了提及现在你必须在使用后再次将属性设置为nil,例如:通过dealloc
方法:
- (void)dealloc
{
self.textView = nil;
}
据我所知,标有NS_AUTOMATED_REFCOUNT_WEAK_UNAVAILABLE
的类不支持弱引用,但原因是什么?
答案 0 :(得分:13)
我想我找到了某些类不支持弱引用的原因:
您可以阅读here:
基本原理:从历史上看,类可以通过覆盖retain,release等来提供自己的引用计数实现。但是,对对象的弱引用需要与其类的引用计数实现进行协调,因为事物,弱负荷和商店必须是最终版本的原子。因此,现有的自定义引用计数实现通常不支持弱引用而无需额外的工作。在不破坏二进制兼容性的情况下,这是不可避免的。