核心部分是用C编写的,并且使用了大量的线程,我正在开发Objective C中的UI,
如果我不执行该线程它工作正常,但我无法禁用,停止线程,UI在我可以看到的日志中随机崩溃,以下消息
__NSautoreleasenopool(): Object 0x350270 of class NSCFString autoreleased with no pool in place - just leaking
类似的消息更多一次,
通过谷歌搜索来了解,我需要设置NSautoReleasePool来摆脱它,但它如何可能与C代码集成相同.
编辑:核心库将从UI激活,因此我想,可以肯定地说UI在主线程中运行,lib正在创建/终止线程而不通知UI,
在这种情况下,我可以在UI中调用autoReleasePool
谁能指导我?
解决方法 有关Cocoa多线程的知识,请参阅这些文档: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Multithreading/ThreadSafetySummary/ThreadSafetySummary.html可以像你一样设计你的应用程序,但应该记住两件事:
>在主线程上 *** 作像视图(AppKit或UIKit)这样的UI控件时,生命是最简单的(有时是必要的).您可以在后台线程上使用Foundation对象和一些AppKit / UIKit对象,并且可以从多个线程使用一些Foundation对象.
>如果您在后台线程中使用任何Cocoa对象,则需要在这些线程上设置自动释放池.
像这样:
- (voID)backgroundThreadStart { NSautoreleasePool * pool = [[NSautoreleasePool alloc] init]; // do stuff [pool release];}
这将修复您的控制台错误,但您可能还有其他问题导致您看到的实际崩溃.
总结以上是内存溢出为你收集整理的多线程 – “没有池到位时自动释放”是什么意思?全部内容,希望文章能够帮你解决多线程 – “没有池到位时自动释放”是什么意思?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)