OStack程序员社区-中国程序员成长平台

标题: ios - 了解临时对象的使用 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 02:53
标题: ios - 了解临时对象的使用

也许是一个愚蠢的问题,但我想我还是会问这个问题,因为我仍在努力解决内存管理问题。

这是吗:

1.

ViewController *tViewController = [[ViewController alloc] initWithNibName"ViewController" bundle:nil];
self.viewController = tViewController;
[tViewController release];

比这更好:

2.

self.viewController = [[[ViewController alloc] initWithNibName"ViewController" bundle:nil] autorelease];

如何以及为什么?

编辑:

好的,首先,我已经安全地释放了我所拥有的一切。我可以看到这种情况发生。

但在第二种情况下,它是一个延迟发布,那么我如何确定它何时消失?这个 autorelease 东西让我很困惑。

这不是程序中可能发生此类事情的唯一实例。当我想让我创建的特定对象保持活力直到天知道什么时候,我该怎么办?我的autorelease呢?但如果它在错误的时间消失了呢?那我该怎么办?



Best Answer-推荐答案


两者的最终结果是相同的,但它们到达那里的方式不同。在这两种情况下,您都在创建一个稍后发布的临时引用。

第一个版本在发布时立即释放实例(确定性)——尽管由于 self.viewController 可能是一个强引用,实例不会在发布调用时被释放。

当当前自动释放池被释放时,第二个版本会在未来某个时间点(非确定性)释放实例。再一次 - 如果 self.viewController 持有对它的引用,则不会被释放。

关于ios - 了解临时对象的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17088602/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4