在ARC下IBOutlet是强还是弱?

在ARC下IBOutlet是强还是弱?

我是专为iOS 5开发使用ARC。应IBOutletS到UIViewS(及子类)为strongweak?

以下内容如下:

@property (nonatomic, weak) IBOutlet UIButton *button;

就能摆脱这一切:

- (void)viewDidUnload{
    // ...
    self.button = nil;
    // ...}

这样做有什么问题吗?模板正在使用strong与从“InterfaceBuilder”编辑器直接连接到标头时自动生成的属性一样,但为什么?这个UIViewController已经有一个strong提及其view保留它的子视图。


眼眸繁星
浏览 449回答 3
3回答

慕勒3428872

摘要开发者库:从实际角度来看,在IOS和OSX中,应将出口定义为已声明的属性。插座通常应该是弱的,除了那些从文件的所有者到顶级对象在一个nib文件(或者,在IOS中,一个故事板场景),应该是强大的。因此,默认情况下,您创建的出口通常是弱的,因为:例如,您创建的到视图控制器视图或窗口控制器窗口的子视图的出口,是不暗示所有权的对象之间的任意引用。强出口通常由框架类指定(例如,UIViewController的视图出口或NSWindowController的窗口出口)。@property (weak) IBOutlet MyView *viewContainerSubview;@property (strong) IBOutlet MyOtherClass *topLevelObject;

慕婉清6462132

而文档建议使用weak关于子视图的属性,因为IOS 6似乎可以使用strong(默认的所有权限定符)。这是由UIViewController视图不再卸载。在iOS 6之前,如果您保持到控制器视图的子视图的强链接,如果视图控制器的主视图被卸载,那么只要视图控制器在附近,这些视图就会保持子视图。从iOS 6开始,视图不再被卸载,而是加载了一次,然后只要它们的控制器在那里,就会继续运行。所以强大的属性就不重要了。它们也不会创建强引用周期,因为它们指向强引用图。话虽如此,我在使用@property (nonatomic, weak) IBOutlet UIButton *button;和@property (nonatomic) IBOutlet UIButton *button;在IOS 6及以后:使用weak清楚地说明控制器不想拥有按钮的所有权。但忽略了weak在iOS 6中,在没有视图卸载的情况下不会受到伤害,而且更短。有些人可能会指出,这也是更快,但我还没有遇到一个应用程序太慢,因为weak IBOutletS.不使用weak可能被视为错误。底线:从iOS 6开始,只要我们不使用视图卸载,我们就不会再犯这个错误了。该开派对了。;)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

iOS