【问题标题】:why it is recommended to use the _weak reference with delegates为什么建议对委托使用 _weak 引用
【发布时间】:2014-08-12 01:16:20
【问题描述】:

大家好,是否有人会详细说明为什么建议对代表使用 _weak 引用而不是强引用?虽然我们也可以对委托使用强引用。 有人会用更简单的描述性例子告诉我在什么情况下我们应该使用强引用以及在什么情况下我们应该为代表使用_weak引用。

我遇到了一个关于堆栈溢出的相关问题

Is it ever Ok to have a 'strong' reference for a delegate?

但它并没有正确地清除我的概念。

我们将不胜感激!

谢谢。

【问题讨论】:

    标签: ios iphone objective-c delegates retain-cycle


    【解决方案1】:

    在委托上使用__strong 很容易创建保留循环:

    假设A对B有强引用,某个对象将A设置为B的委托,如果委托被强引用,则形成一个retain循环。

    【讨论】:

    • 请你告诉我一些我们更喜欢使用 _weak 和我们更喜欢使用 strong 的例子。
    • 在我看来,你永远不应该在委托模式中使用强引用,如果你确实需要让你的委托保持活动状态,你应该使用委托关系之外的一些对象来做到这一点。始终使用弱委托模式使您的代码易于调试和一致。
    【解决方案2】:

    是的,在委托上使用 __strong 时创建一个保留循环是东方式。

    另外,在ARC中,我们使用weak on delegate,当使用delegate的对象被释放时,delegate会自动为nil。

    【讨论】:

    猜你喜欢
    • 2016-04-09
    • 2011-12-15
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多