繁体   English   中英

参考块中的self计数

[英]Reference Counting of self in Blocks

我试图了解对象生命周期和引用计数如何与代码块交互。 在下面的代码中,我只是做一个简单的动画,当UINavigationController的堆栈顶视图被交换时闪烁。 棘手的部分是弹出的视图控制器是定义此代码的控制器

[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)当使用这种方法进行pop + push循环时,是否正确不再需要保留self,就像其他不使用块的类似示例一样?

(2)调用animateWithDuration:...使用这些块保留定义视图控制器(self),直到块执行?

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

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

(2)调用animateWithDuration:...使用这些块保留定义视图控制器(self),直到块执行?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM