【问题标题】:Which one of these would cause a retain cycle? (obj-c, sample code) [closed]其中哪一项会导致保留周期? (obj-c,示例代码)[关闭]
【发布时间】:2023-04-04 03:36:01
【问题描述】:

在使用块时仍然试图掌握保留循环的窍门。 我的问题是.. 以下哪一项(如果有)会导致保留周期?

1

[self.someProperty runSomeBlock:^{
   [self.someOtherProperty doSomething];
}];

2

[self.someProperty runSomeBlock:^{
   [self doSomething];
}];

3

[self.someProperty runSomeBlock:^{
   [someObject runAnotherBlock:^{
      [self.someProperty doSomething];
   }];
}];

4

[self.someProperty runSomeBlock:^{
   [someObject runAnotherBlock:^{
      [self.someOtherProperty doSomething];
   }];
}];

谢谢!

【问题讨论】:

    标签: ios objective-c memory-management retain-cycle


    【解决方案1】:

    从表面上看,它们都没有。导致带有块的保留循环的事情是例如当您将块交给的东西持续存在并保留(随着时间的推移)并且随着时间的推移您保留了该东西,并且块提到了您 - 并且没有明显的证据表明这里会发生这种情况。

    换句话说,它与总是导致保留循环的基本事物没有什么不同:A 保留 B 但 B 保留 A。但是在您的代码中,我没有看到任何人保留任何人的证据。

    在任何情况下,如果所有对象都只是在收到它们时立即执行它们的块,那么首先没有什么可担心的,因为问题只是持久性。 p>

    听起来你只是想多了。

    【讨论】:

    • 如果你想看一个实际的危险案例,请在此处阅读我的讨论:apeth.com/iOSBook/… 这指出了几个危险案例并非常清楚地解释了为什么它们是危险案例,即它跟踪持久性/保留故事,以便您可以看到周期。请注意,这些都不是立即执行的案例;这些都是表达对象可能在未来某个不确定时间做的事情的块,这就是危险的开始......
    • 一种情况可能是:如果您在对象的整个生命周期内保留块(例如,将块存储在 self 的 ivar 中)并且参考 @987654323 @ 在块内(而不是使用“弱自我”引用),那么您将有一个保留周期。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多