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

@property (nonatomic,weak) id delegate;

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

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

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

推荐答案

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

Objective-c相关问答推荐

iOS 11 large-title导航栏不折叠

当 UIView 框架更改时,视图内的 AVPlayer 层不会调整大小

NS_ASSUME_NONNULL_BEGIN 宏

`-fembed-bitcode` 和 BITCODE_GENERATION_MODE 有什么区别?

如何在 ios 8 的 alertview 中添加文本输入?

iOS 上 64 位的 BOOL

首次提交应用内购买以供审核

如何获取目标名称?

在 UILabel 中垂直对齐文本(注意:使用 AutoLayout)

无法在导航栏中心设置titleView,因为返回按钮

StoryBoard 助理编辑器停止显示相关文件

带有 IB_DESIGNABLE 的 UIButton 会引发运行时属性警告,并且不会在 Interface Builder 中呈现

Xcode 在 iOS 8 中的 Main() 中引发异常,并带有“所有异常”断点

仅在 iOS 7 上运行时,Storyboard 原型单元(Xcode 6、iOS 8 SDK)中的 UICollectionViewCell contentView 框架的自动调整大小问题

只有 ONE VIEW 横向模式

XCTAssert 和 XCTAssertTrue 有什么区别?

Facebook 添加测试用户和管理员是:(待定),这是什么意思?

如何在 Xcode 中将内容打印到控制台?

带有 NSBlockOperation 和队列的 NSURLSession

XCTAssertEqual 不适用于双精度值