在iOS 4上使用ARC,在使用unsafe_unretained而不是weak时,是否需要使我的IBOutlet属性无效?

时间:2012-04-05 10:45:43

标签: objective-c automatic-ref-counting reference-counting

在iOS 5中使用ARC时,弱IBOutlet会创建归零引用,无需

self.< IBOutlet property > = nil;
中的

- (void)viewDidUnload

如果我使用iOS 4(并使用ARC )并强制使用 unsafe_unretained ,那么这是否意味着我必须覆盖 viewDidUnload 并手动将属性设置为nil?

编辑: 这与我的案例有关:Should IBOutlets be strong or weak under ARC? 唯一的例外是:我不能使用'weak'关键字创建归零引用。

希望我的问题更清楚。

由于

2 个答案:

答案 0 :(得分:3)

使用ARC时,我相信你已经意识到,弱势属性不能在iOS5之前使用。硬币的另一面是使用unsafe_unretained。弱属性会自动将您的属性设置为nil。 Unsafe_retained(在iOS 5之前称为“assign”),不会,你需要自己做。

答案 1 :(得分:1)

没有属性(在iOS中),IBOutlet将由KVC设置和保留。使用@property,通过设置属性来设置ivar。

在ARC项目中,如果创建一个笔尖并将项目(例如UILabel)拖到.h文件中,则会添加一个强@property项以及.m文件中的一行将属性设置为nil将添加到viewDidUnload方法和属性的@synthesize语句中。

还有其他方法可以处理保留nib IBOutlets的工作方式,甚至可能通过某种指标更好。

来自Apple文档Resource Programming Guide - Managing the Lifetimes of Objects from Nib Files

  

因为网点的行为取决于平台,实际   声明不同:

     

对于iOS,您应该使用:
  @property(nonatomic,retain)IBOutlet UserInterfaceElementClass * anOutlet;

     

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

我的信念是不要像苹果公司那样做事,这样做往往会让事情变得更难。还要考虑Apple有关于该平台未来的内部信息。 : - )