模板“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的东西
答案 0 :(得分:4)
嗯,这与MRC基本相同。
您的IBOutlet通常位于控制器的视图层次结构中,并由其父视图隐式保留。您可以使用assign
(MRC)或weak
或unsafe_unretained
(ARC)。在所有情况下,从视图层次结构中删除对象时,指针都将失效。
唯一的区别是在MRC和ARC 4.0上,指针不会自动设置为nil。它仍然包含内存地址但地址无效。
在任何情况下,您都不应再使用指针。
每当你想要使用该对象时,即使它不是你的视图层次结构的一部分(通常是xib中的每个顶级元素,或者你动态地从层次结构中删除视图而你不希望它们失效),使用retain
或strong
说明符。
请注意,许多示例对每个IBOutlet都使用strong
,这不是错误。这没有必要。