我正在尝试理解对象生命周期和引用计数如何与代码块交互。在下面的代码中,我只是做了一个简单的动画,在 UINavigationController 的堆栈中交换顶部视图时会闪烁。棘手的部分是 弹出的视图控制器是定义此代码的视图控制器。
我的问题是(不考虑动画效果),从内存管理的角度来看,这种方法是否正确。特别是:
(1)当使用此方法进行“弹出+推入”循环时,是否不再需要保留self,就像其他相似例子中不使用块一样?
(2)在使用这些块调用animateWithDuration:...时,是否会保留定义的视图控制器(self)直到块执行?
[UIView animateWithDuration:0.2
animations:^{self.navigationController.view.alpha = 0.0;}
completion:^(BOOL finished){
UINavigationController *navController = self.navigationController;
[self.navigationController popViewControllerAnimated:NO];
[navController pushViewController:nextView animated:NO];
[nextView release];
[UIView animateWithDuration:0.2
animations:^{navController.view.alpha = 1.0;}];
}];
我的问题是(不考虑动画效果),从内存管理的角度来看,这种方法是否正确。特别是:
(1)当使用此方法进行“弹出+推入”循环时,是否不再需要保留self,就像其他相似例子中不使用块一样?
(2)在使用这些块调用animateWithDuration:...时,是否会保留定义的视图控制器(self)直到块执行?
ATSDragToReorderTableViewController *blockSelf = self;
并使用了本地的 blockSelf,但是一些方式下 self 仍然被保留并且没有释放(当我弹出它时 dealloc 方法没有被调用)。我做错了什么??? - Hlung