SO here 上也有类似的问题,但是我只想澄清一些在那里没有完全解释的事情。
我理解所有代表和导出——实际上任何对“父”对象的引用,作为一个好公民并考虑一下对象图——应该将弱引用归零。由于在引用对象的保留计数达到零时将弱指针归零的性质自动降至零,这是否意味着现在不需要在 viewDidUnload
中将 IBOutlets 设置为零?
所以,如果我这样声明我的导出:
@property (nonatomic, weak) IBOutlet UILabel *myLabel;
下面的代码有没有效果?
- (void)viewDidUnload
{
self.myLabel = nil;
[super viewDidUnload];
}
最佳答案
只是做了一点研究......
据我了解,weak 与 assign 类似,因为它们都是弱引用。
但是,assign 不会创建归零引用。即,如果相关对象被销毁,并且您访问该属性,您将得到一个 BAD_ACCESS_EXCEPTION
。
当它引用的对象被销毁时,弱属性会自动归零(= nil)。
在这两种情况下,都没有必要将属性设置为 nil,因为它不会影响相关对象的保留计数。在使用保留属性时是必需的。
显然,ARC 还引入了一个新的“强”属性,它与“保留”相同?
研究完成 here
关于ios - ARC下的IBOutlet和viewDidUnload,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7682322/