ios - ARC下的IBOutlet和viewDidUnload

标签 ios weak-references iboutlet automatic-ref-counting

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/

相关文章:

ios - 翠鸟: 'setBackgroundImage(with:for:placeholder:options:progressBlock:completionHandler:)' 的使用不明确

iphone - 检查 tabBar 在 iOS 应用程序上是否可见

swift - 内部闭包的捕获列表是否需要将 `self` 重新声明为 `weak` 或 `unowned`?

swift - 我可以在协议(protocol)中使用 @IBOutlets (Swift)

iphone - 有没有办法简化这个 IBOutletConnection 语句?

android - iOS\Android Facebook SDK - 获取好友列表,有些没有用户名

c# - 弹出式导航 - iOS

c# - 为什么这个通用 C# WeakEvent 监听器不起作用?

c# - 来自 Reactive 扩展的 PCL WeakEventManager 在 3 - 7 分钟内处理事件

objective-c - 如何从 Objective-C 中的其他类访问 IBOutlets?