SomeViewController *newController = [SomeViewController new];
[newController setSomeBlock:^{
[self.someProperty doSomething];
}];
[self presentViewController:newController animated:YES completion:nil];
SomeViewController
有someBlock
作为属性,父视图控制器self
显示newController
,newController
的{{1}}正在访问父级查看控制器的someBlock
。
这会导致保留周期吗?
答案 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