Stu*_*art 36 weak-references iboutlet ios automatic-ref-counting
还有一个类似的问题这对SO 在这里,但我只是想澄清的东西,并没有完全解释存在.
据我所知,所有代表和出口 - 事实上任何对"父"对象的引用,作为一个好公民,并考虑一分钟的对象图 - 应该归结为弱引用.由于零指针的性质在引用对象的保留计数达到零时自动降至零,这是否意味着现在将IBOutlets设置为nil viewDidUnload是不必要的?
所以,如果我这样宣布我的出口:
@property (nonatomic, weak) IBOutlet UILabel *myLabel;
Run Code Online (Sandbox Code Playgroud)
以下代码是否有效?
- (void)viewDidUnload
{
self.myLabel = nil;
[super viewDidUnload];
}
Run Code Online (Sandbox Code Playgroud)
Dar*_*Teo 15
做一点研究......
据我了解,弱与分配类似,因为它们都是弱引用.
但是,assign不会创建归零引用.即如果有问题的对象被销毁,并且您访问该属性,您将得到一个BAD_ACCESS_EXCEPTION.
当引用的对象被销毁时,弱属性会自动归零(= nil).
在这两种情况下,都没有必要将property设置为nil,因为它不会导致所讨论对象的保留计数.使用保留属性时必须这样做.
显然,ARC还引入了一个新的"强大"属性,与"保留"相同?
研究在这里完成
Stu*_*art 11
我做了一个小测试,看来,在代码viewDidUnload的方法是不必要的.为了支持这一点,viewDidUnload实际的文档确实说:
调用此方法时,view属性为nil.
指示弱引用必须已nil自动设置.
我有一些经验证据支持IBOutlets确实已经自动设置为零.这是我做的:
@synthesize myLabel = myLabel_)设置了明确的ivars,以便稍后我可以在调试器中检查它们的值.viewDidUnload.viewDidUnload通过模拟内存警告来调用.明确的ivars都有nil它们的价值,然后我点击了断点.
| 归档时间: |
|
| 查看次数: |
7076 次 |
| 最近记录: |