2012-04-05 51 views
1

当使用ARC与iOS5,弱IBOutlet中创建了一个调零基准,避免在需要在iOS 4上使用ARC时,在使用unsafe_unretained而不是weak时是否需要删除我的IBOutlet属性?

self.< IBOutlet property > = nil; 

- (无效)viewDidUnload

如果我使用的iOS 4(和使用ARC),并被迫使用unsafe_unretained相反,它意味着我必须重写viewDidUnload和物业手动设置为零?

编辑: 这涉及到我的情况:Should IBOutlets be strong or weak under ARC? 例外是:我不能使用'weak'关键字创建归零引用。

希望我的问题更清楚。

由于

+1

你为什么使用'unsafe_unretained'?在iOS中(与OS X相反),应该保留IBOutlets。 – zaph 2012-04-05 10:59:55

+1

@Zaph我刚看了一下[资源编程指南 - 管理Nib文件中对象的生存期](https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/LoadingResources/ CocoaNibs/CocoaNibs。html),它似乎建议你只对顶级对象使用强,对其他所有对象使用较弱,这与我以前相信的相反,但对于您创建的这个“Outlet”行来说是有意义的,例如,视图控制器的视图或窗口控制器的窗口,是不隐含所有权的对象之间的任意引用。 – 2012-04-05 11:07:38

+0

@Paul我明白你说的是真的 - 但是这个建议对于完全理解所有含义的开发者来说真的只是一个好消息。显然这个操作不适用于很多开发人员。请参阅下面的答案。 – zaph 2012-04-05 11:30:13

回答

3

使用ARC时,我相信你已经意识到,弱属性不能在iOS5之前使用。硬币的另一面是使用unsafe_unretained。弱属性会自动将您的属性设置为零。 Unsafe_retained(也称为iOS 5之前的“分配”)不会,而且您需要自己完成此操作。

1

没有一个属性(在IOS)的IBOutlet中会的ivar被设置,并通过KVC保留。与@property伊娃是通过设置财产。

圆弧上的项目,如果创建一个笔尖和拖动某项(比如UILabel)到.h文件很强@property将在.M加入以及文件中的行将该属性设置为无会将该方法添加到viewDidUnload方法中,并为属性添加@synthesize语句。

还有其他方法可以处理保留nibIBOutlets的工作,甚至可能更好的一些指标。

从Apple文件Resource Programming Guide - Managing the Lifetimes of Objects from Nib Files

由于网点的行为取决于平台上,实际 声明有所不同:

对于iOS,你应该使用:
@property(非原子,保留)IBOutlet UserInterfaceElementClass * anOutlet;

对于OS X,您应该使用:
@property(assign)IBOutlet UserInterfaceElementClass * anOutlet;

我的信念是不打苹果做事情的方式,这样做往往会让事情变得更加困难。还要考虑Apple拥有该平台未来的内部信息。 :-)

+0

您正在引用Legacy部分。我使用ARC,但由于使用iOS 4而只有1个限制 - 我无法使用弱关键字(但可以使用强大的)。因此,我的情况涉及非遗留情况。 – Riaz 2012-04-05 22:36:24

+0

我编辑了我的问题以包含“使用iOS 4(并使用ARC)” – Riaz 2012-04-05 22:37:51

相关问题