【问题标题】:Strong attribute on NSArray and retain cycleNSArray 的强属性和保留周期
【发布时间】:2014-05-25 09:37:52
【问题描述】:

我正在制作一个 iOS 应用程序,其中我有一个 Event 类和一个 Participant 类。

Event 类作为具有strong 属性的NSArray *participants 属性。 Participant 类需要有一个属性来引用参与者所在的事件。

我在问自己,参与者数组作为strong 属性这一事实是否意味着此 NSArray 中的每个参与者也是一个强属性?所以Participant类的event属性是否需要有weak属性才能避免retain循环?

感谢您的帮助

【问题讨论】:

    标签: ios objective-c properties


    【解决方案1】:

    如果您的Event 类对其Participant 具有强引用,则Participant 类应该对其Event 具有弱引用是正确的。但是,您将NSArray 的强属性误认为该数组包含对每个Participant 的强引用。 NSArray 将始终保持对其持有的项目的强引用。强大的是 Event 类对其数组的引用。

    【讨论】:

    • 请注意,将对参与者数组的引用更改为弱不会阻止保留周期。
    • 是的,我明白了,我不知道 NSArray 总是作为对其对象的强引用。谢谢!
    【解决方案2】:

    是的,反向关系(参与者 -> 事件)应该是weak,因为没有事件参与者就无法存在,这不会造成任何问题。这意味着如果您删除事件,参与者也将被自动释放。

    【讨论】:

      【解决方案3】:

      如果您声明 NSArray strong您将保留该数组中的引用。 是自身保留对象NSArray

      并且YES,如果object A retains BB 应该只有一个weak reference to A,则避免retain cycle。但要小心管理该数组中的对象。

      最后我无法弄清楚你的结构,但也许participants 数组是对象Participant

      考虑使用Delegation 模式或KVO 的可能性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-16
        • 2011-12-07
        • 2015-09-25
        • 2013-06-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-13
        相关资源
        最近更新 更多