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

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

这会导致保留周期吗?

4

1 回答 1

2

不,这不会创建保留周期,因为您使用 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 文档

于 2014-08-26T09:55:57.157 回答