objective-c - 为什么使用弱指针进行委托(delegate)?

标签 objective-c

我不明白为什么用弱指针定义一个委托(delegate)是正确的:

@property (nonatomic,weak) id delegate;

我不明白为什么不需要保留对委托(delegate)的引用...我不希望我用作委托(delegate)的对象被释放...因此,我更喜欢使用强引用不弱!

在许多情况下,委托(delegate)与将创建我的类的实例的对象相同,在这种情况下,创建弱引用将是避免保留循环的一个很好的解决方案......但是如果我选择一个完全不同的对象怎么办作为代表?

我搜索了有关堆栈溢出的其他问题,但找不到可以帮助我完全理解这种情况的内容。

最佳答案

对象弱保留其委托(delegate)的原因是为了避免保留循环。想象以下场景:对象 a 创建 b 并保留它,然后将自己设置为 b 的委托(delegate)。 a 由其所有者释放,留下一个包含 ab 的保留循环。这实际上是一个非常常见的场景。考虑一个 View Controller ,它拥有一个 View 并充当该 View 的委托(delegate)。在这种情况下, View 不应该保留 Controller ——作为适当的 MVC 架构的主体并防止保留循环。

关于objective-c - 为什么使用弱指针进行委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8449040/

相关文章:

objective-c - 同步 iOS 和 Mac OS X 数据

objective-c - 动画 MKOverlayView

c++ - 从 C++ 库通知 Objective C

ios - 覆盖第 3 方 ViewController 的 Autorotation 属性

ios - 有什么办法可以更改通知图像

iphone - 按下取消时显示警报 View 并保持在同一 View Controller 上

objective-c - 如何获取所有 mime 类型 Google Drive Api IOS

iOS iPhone 寻求将带时间戳的整数快速记录到数据文件实现

objective-c - Objective C 选择器到单点触控功能的映射

纯 c/posix 风格的 iPhone 文件 IO