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

@property (nonatomic,weak) id delegate;

我不明白为什么不需要保留对代表的引用...我不希望我用作委托的对象被解除分配...因此,我宁愿使用强引用,而不是弱引用!

在许多情况下,委托是创建类实例的同一个对象,在这种情况下,创建弱引用将是避免保留循环的一个很好的解决方案...但是如果我 Select 一个完全不同的对象作为代理呢?

我搜索了关于堆栈溢出的其他问题,但找不到能够帮助我完全理解这种情况的东西.

推荐答案

对象弱保留其委托的原因是为了避免保留循环.想象一下下面的场景:对象a创建b并保留它,然后将自己设置为b的委托.a由其所有者释放,留下一个包含ab的保留周期.这实际上是一种非常常见的情况.考虑一个视图控制器,它拥有一个视图并充当那个视图的委托.在这种情况下,视图不应将控制器保留为适当的MVC体系 struct ,并防止保留周期.

Objective-c相关问答推荐

核心数据独特属性

在我的 UIImageView 的子类中没有调用 drawRect

NSLocale 和国家名称

将 CFDictionaryRef 转换为 NSDictionary?

动态转发: suppress Incomplete Implementation 警告

Objective-C 的 Eclipse 插件?

iOS 6 Facebook 发布过程以remote_app_id 与存储的 id 不匹配结束

当表格重新出现时,UITableView 不会自动取消 Select 选定的行

Electron邮件镇静 iOS 8

在 Objective-C 中,你在哪里声明一个常量?

从 NSString 中删除换行符

带有 NSBlockOperation 和队列的 NSURLSession

iOS是静态框架还是动态框架?

Select 具有受支持架构的目标以便在此设备上运行

既然我正在使用 Core Data,如何对我的模型进行单元测试?

获取临时目录中文件的文件路径和 URL

使用 Objective-C 发布多部分/表单数据

Block 隐式保留'self';明确提及touch以表明这是预期行为

如何检测父视图控制器中模态视图控制器的解除?

更改导航栏的字体