gpt4 book ai didi

cocoa - 为什么我的自动释放对象没有被释放?

转载 作者:行者123 更新时间:2023-12-03 16:53:03 25 4
gpt4 key购买 nike

我正在调试一个奇怪的内存管理错误,但我无法弄清楚。我注意到我的一些对象在内存中停留的时间比预期的要长。我检查了所有内存管理,最后得出了一个非常不可能的结论:我的一些 autorelease 操作不会导致 release。什么情况下可以呢?我创建了一个小型测试 Canary 类,该类在 dealloc 中记录一条消息,并具有以下测试代码:

NSLog(@"On the main thread: %i.", [NSThread isMainThread]);
[[[Canary alloc] init] autorelease];

根据代码,我们确实在主线程上,但是 Canary 中的 dealloc 直到很久以后才被调用。延迟是不确定的,很容易需要几秒钟或更长时间。这怎么可能?应用程序在 Mac 上运行,垃圾收集已关闭(Objective-C 垃圾收集在目标上设置为不支持。)我主要习惯于 iOS,是OS X 上的内存管理在某些重要方面有所不同?

最佳答案

autorelease 无法按预期运行的唯一情况是当前线程上没有自动释放池。只有少数情况会发生这种情况,如果确实发生,您会在控制台上打印一条非常响亮的日志消息。如果您没有看到该日志,则 autorelease 的行为正常。更有可能的情况是,您的代码中的某些内容正在调用此 Canary 对象的 retain,然后永远不会释放它。

关于cocoa - 为什么我的自动释放对象没有被释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5122000/

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