【问题标题】:Will this cause a retain cycle? (obj-c, sample code)这会导致保留周期吗? (obj-c,示例代码)
【发布时间】:2014-08-26 09:48:29
【问题描述】:
SomeViewController *newController = [SomeViewController new];
[newController setSomeBlock:^{
   [self.someProperty doSomething];
}];
[self presentViewController:newController animated:YES completion:nil];

SomeViewController 具有someBlock 作为属性,父视图控制器self 呈现newController,而newControllersomeBlock 正在访问父视图控制器的self.someProperty

这会导致保留循环吗?

【问题讨论】:

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


    【解决方案1】:

    不,这不会创建保留周期,因为您使用 self 的块由 SomeViewController 保留,而不是 self/当前视图控制器类本身。

    当您执行此代码时,someviewcontroller 的块将在其作用域内保留 self,当您弹出 someviewcontroller 或该块被释放时,它将释放 self。

    仅当两个对象相互保留时才会引起保留循环,例如,在这种情况下:

    SomeViewController *newController = [SomeViewController new];
    [newController setSomeBlock:^{
        [newController doSomething];
    }];
    [self presentViewController:newController animated:YES completion:nil];
    

    您可以通过在 SomeViewController 和当前 View Controller 中的 dealloc 方法中添加 NSLog 语句来进一步验证这一点。

    详情请参考Apple Docs

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多