gpt4 book ai didi

ios - 了解临时对象的使用

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:46:32 26 4
gpt4 key购买 nike

这可能是个愚蠢的问题,但我想我还是会问这个问题,因为我仍在努力研究内存管理。

这是:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com