也许是一个愚蠢的问题,但我想我还是会问这个问题,因为我仍在努力解决内存管理问题。
这是吗:
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
呢?但如果它在错误的时间消失了呢?那我该怎么办?
两者的最终结果是相同的,但它们到达那里的方式不同。在这两种情况下,您都在创建一个稍后发布的临时引用。
第一个版本在发布时立即释放实例(确定性)——尽管由于 self.viewController 可能是一个强引用,实例不会在发布调用时被释放。
当当前自动释放池被释放时,第二个版本会在未来某个时间点(非确定性)释放实例。再一次 - 如果 self.viewController 持有对它的引用,则不会被释放。
关于ios - 了解临时对象的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17088602/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |