这会导致保留周期吗? (obj-c,示例代码)

时间:2014-08-26 09:48:30

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

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

SomeViewControllersomeBlock作为属性,父视图控制器self显示newControllernewController的{​​{1}}正在访问父级查看控制器的someBlock

这会导致保留周期吗?

1 个答案:

答案 0 :(得分:2)

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

执行此代码时,someviewcontroller的块将在其范围内保留self,当你弹出someviewcontroller或该块被取消分配时,它会释放自我。

保留周期仅在两个对象相互保留时引起,例如,在这种情况下:

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

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

有关详细信息,请参阅Apple Docs