在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;
慕婉清6462132
TA贡献1804条经验 获得超2个赞
weak
strong
UIViewController
在iOS 6之前,如果您保持到控制器视图的子视图的强链接,如果视图控制器的主视图被卸载,那么只要视图控制器在附近,这些视图就会保持子视图。 从iOS 6开始,视图不再被卸载,而是加载了一次,然后只要它们的控制器在那里,就会继续运行。所以强大的属性就不重要了。它们也不会创建强引用周期,因为它们指向强引用图。
@property (nonatomic, weak) IBOutlet UIButton *button;
@property (nonatomic) IBOutlet UIButton *button;
使用 weak
清楚地说明控制器不想拥有按钮的所有权。 但忽略了 weak
在iOS 6中,在没有视图卸载的情况下不会受到伤害,而且更短。有些人可能会指出,这也是更快,但我还没有遇到一个应用程序太慢,因为 weak
IBOutlet
S. 不使用 weak
可能被视为错误。
- 3 回答
- 0 关注
- 448 浏览
添加回答
举报
0/150
提交
取消