为了账号安全,请及时绑定邮箱和手机立即绑定

在ARC下IBOutlet是强还是弱?

在ARC下IBOutlet是强还是弱?

iOS
眼眸繁星 2019-06-18 13:29:51
在ARC下IBOutlet是强还是弱?我是专为iOS 5开发使用ARC。应IBOutletS到UIViewS(及子类)为strong或weak?以下内容如下:@property (nonatomic, weak) IBOutlet UIButton *button;就能摆脱这一切:- (void)viewDidUnload{     // ...     self.button = nil;     // ...}这样做有什么问题吗?模板正在使用strong与从“InterfaceBuilder”编辑器直接连接到标头时自动生成的属性一样,但为什么?这个UIViewController已经有一个strong提及其view保留它的子视图。
查看完整描述

3 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

摘要开发者库:

从实际角度来看,在IOS和OSX中,应将出口定义为已声明的属性。插座通常应该是弱的,除了那些从文件的所有者到顶级对象在一个nib文件(或者,在IOS中,一个故事板场景),应该是强大的。因此,默认情况下,您创建的出口通常是弱的,因为:

  • 例如,您创建的到视图控制器视图或窗口控制器窗口的子视图的出口,是不暗示所有权的对象之间的任意引用。

  • 强出口通常由框架类指定(例如,UIViewController的视图出口或NSWindowController的窗口出口)。

    @property (weak) IBOutlet MyView *viewContainerSubview;@property (strong) IBOutlet MyOtherClass *topLevelObject;


查看完整回答
反对 回复 2019-06-18
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

而文档建议使用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开始,只要我们不使用视图卸载,我们就不会再犯这个错误了。该开派对了。;)


查看完整回答
反对 回复 2019-06-18
  • 3 回答
  • 0 关注
  • 448 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信