ARC中的IBOutlet和终身限定符

时间:2011-12-06 07:48:10

标签: cocoa-touch automatic-ref-counting

模板“MasterDetail”应用程序在DetailViewController.h中使用IBOutlet限定符编写strong属性。

@property (strong, nonatomic) IBOutlet UILabel *detailDescriptionLabel; 

在iTunesU的Standford CS193课程中(第2课时间14:30),他们将IBOutlet设置为weak,说标签已经有一个由窗口创建的强指针。

现在,我的问题是我们如何为IBOutlet声明存储,如Label和Button?使用弱者是否正确?如果我在iOS4上,可以使用unsafe_unretained吗?

编辑-----

我找到了关于强弱的答案......主要规则是:

  • strong用于xib的顶级元素
  • weak用于标签按钮等子元素。

您可以查看documentation
但我还是找不到关于iOS 4的东西

1 个答案:

答案 0 :(得分:4)

嗯,这与MRC基本相同。

您的IBOutlet通常位于控制器的视图层次结构中,并由其父视图隐式保留。您可以使用assign(MRC)或weakunsafe_unretained(ARC)。在所有情况下,从视图层次结构中删除对象时,指针都将失效。 唯一的区别是在MRC和ARC 4.0上,指针不会自动设置为nil。它仍然包含内存地址但地址无效。 在任何情况下,您都不应再使用指针。

每当你想要使用该对象时,即使它不是你的视图层次结构的一部分(通常是xib中的每个顶级元素,或者你动态地从层次结构中删除视图而你不希望它们失效),使用retainstrong说明符。

请注意,许多示例对每个IBOutlet都使用strong,这不是错误。这没有必要。