Multithreading 什么是“;自动释放,无池到位”;什么意思?
我的申请结构如下:, 核心部分是用C++编写的,并且使用了大量的线程,我在上面的目标C中开发了UI。 如果我不执行线程,它可以正常工作,但我不能禁用、停止线程,UI在我看到的日志中随机崩溃,如下消息Multithreading 什么是“;自动释放,无池到位”;什么意思?,multithreading,cocoa,debugging,objective-c++,Multithreading,Cocoa,Debugging,Objective C++,我的申请结构如下:, 核心部分是用C++编写的,并且使用了大量的线程,我在上面的目标C中开发了UI。 如果我不执行线程,它可以正常工作,但我不能禁用、停止线程,UI在我看到的日志中随机崩溃,如下消息 __NSAutoreleaseNoPool(): Object 0x350270 of class NSCFString autoreleased with no pool in place - just leaking 类似的信息不止一次出现, 通过Google来了解,我需要设置NSAutoRe
__NSAutoreleaseNoPool(): Object 0x350270 of class NSCFString autoreleased with no pool in place - just leaking
类似的信息不止一次出现,
通过Google来了解,我需要设置NSAutoReleSeCo水池来摆脱它,但是如何将它与C++代码集成在一起。p>
Edit:核心库将从UI激活,因此我想,可以安全地说UI在主线程中运行,库在不通知UI的情况下创建/终止线程,
在这种情况下,我可以在UI中调用AutoReleasePool吗
有人能为我指点迷津吗?有关Cocoa多线程的知识,请参阅以下文档: 可以像以前那样设计应用程序,但要记住两件事:
- (void)backgroundThreadStart
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
// do stuff
[pool release];
}
这将修复您的控制台错误,但您可能会遇到其他问题,导致您看到的实际崩溃 这意味着您在没有自动释放池的情况下自动释放了某些内容 每个线程都有一堆自动释放池。在主线程上,在Cocoa调用代码之前为您创建一个自动释放池,并在代码返回后将其耗尽。自动释放的每个对象(无论是显式还是隐式)都会进入池中,以便池在耗尽时释放它。创建线程时,您必须自己在该线程上创建并排空自动释放池。(或者只是不自动释放任何内容,但对于任何有意义的代码来说,这几乎是不可能的。) 如果您决定在垃圾收集下运行代码,则需要在完成后发送池
排放
,而不是释放
,以使池发挥作用。启用GC时,release
和autorelease
消息不会执行它们甚至不会执行的任何操作。您的自动释放池将通过戳垃圾收集器响应drain
,这与释放池中的对象最接近
有关于自动释放池等的更多信息。您好,让我尝试在我的问题中添加更多内容