在ARC下,IBOutlets应该是弱引用还是强引用?

573

我正在使用ARC专门为iOS 5开发。将IBOutlet指向UIView(及其子类)应该使用strong还是weak

以下是问题的代码:

@property (nonatomic, weak) IBOutlet UIButton *button;
会摆脱所有这些:
- (void)viewDidUnload
{
    // ...
    self.button = nil;
    // ...
}

这样做会有什么问题吗?模板使用strong,当直接从“Interface Builder”编辑器连接到标题时自动生成的属性也是如此,但为什么要这样做?UIViewController已经有一个对其viewstrong引用,可以保留其子视图。


11
请注意,IBOutletCollection()不能声明为weak,否则它将返回nil - ohho
Xcode 8.2.1 在通过界面构建器创建 IBOutlets 时使用 weak。然而,这里许多答案建议使用 strong。 - neoneye
1
@neoneye 我刚刚尝试了使用 Xcode 8.3.2 将 storyboard 拖到 Swift 文件中,它会默认为“strong”。 - CupawnTae
11个回答

4
我认为最重要的信息是: xib文件中的元素会自动成为视图的子视图。子视图是NSArray类型的,NSArray拥有它的元素。等等,这些元素上有强指针。因此,在大多数情况下,您不需要创建另一个强指针(IBOutlet)。
而且,在ARC中,您不需要在viewDidUnload方法中做任何事情。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接