gpt4 book ai didi

multithreading - “Autoreleased with no pool in place”是什么意思?

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

我的应用程序结构如下,核心部分是用 C++ 编写的,并大量使用线程,我正在其上用 Objective C 开发 UI,如果我不执行线程,它工作正常,但我无法禁用、停止线程,UI 在日志中随机崩溃,我可以看到,以下消息

__NSAutoreleaseNoPool(): Object 0x350270 of class NSCFString autoreleased with no pool in place - just leaking

类似的消息不止一次出现,通过谷歌搜索知道,我需要设置 NSAutoReleasePool 来摆脱它,但是如何将其与 C++ 代码集成。

编辑:核心lib将从UI激活,因此我想,可以肯定地说UI在主线程中运行,Lib正在创建/终止线程而不通知UI,在这种情况下,我可以在 UI 中调用 AutoReleasePool

有人可以指导我吗?

最佳答案

请参阅这些文档,了解有关 Cocoa 多线程的知识:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Multithreading/ThreadSafetySummary/ThreadSafetySummary.html

按照现有方式设计应用程序是可以的,但应牢记两件事:

  1. 当在主线程上操作 View (AppKit 或 UIKit)等 UI 控件时,生活是最简单的(有时也是必要的)。您可以在后台线程上使用 Foundation 对象和一些 AppKit/UIKit 对象,并且一些 Foundation 对象可以在多个线程中使用。
  2. 如果您在后台线程中使用任何 Cocoa 对象,则需要在这些线程上设置自动释放池。

像这样:

- (void)backgroundThreadStart 
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

// do stuff

[pool release];
}

这将修复您的控制台错误,但您可能还有其他问题导致您看到的实际崩溃。

关于multithreading - “Autoreleased with no pool in place”是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4768817/

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