参考计数块中的自我

我试图让我的脑海如何对象生命周期和引用计数与代码块交互。 在下面的代码中,我只是做一个简单的animation,当UINavigationController的堆栈上的顶视图交换时闪烁。 棘手的部分是popup的视图控制器是定义这个代码的地方

[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;}]; }]; 

我的问题是(忽略什么animation看起来像),这是从内存pipe理的angular度来做这件事的正确方法。 尤其是:

(1)在pop + push循环中使用这种方法时,正确的是不再需要保留自己,就像其他类似的不使用块的例子一样?

(2)是否调用animateWithDuration:…这些块保留定义视图控制器(自我),直到块执行?

(1)当使用这种方法时,pop + push循环是正确的,不再需要保留自己,就像其他不使用块的类似例子一样?

它是正确的。 如果nextView是局部variables,这些块会自动保留self,navController和nextView。

(2)是否调用animateWithDuration:…这些块保留定义视图控制器(自我),直到块执行?

这些块通过这种方法从堆栈复制到堆中。 这些块在执行后被释放。 然后self,navController和nextView从这些块中释放。