多线程 – “没有池到位时自动释放”是什么意思?

多线程 – “没有池到位时自动释放”是什么意思?,第1张

概述我的申请结构如下, 核心部分是用C编写的,并且使用了大量的线程,我正在开发Objective C中的UI, 如果我不执行该线程它工作正常,但我无法禁用,停止线程,UI在我可以看到的日志中随机崩溃,以下消息 __NSAutoreleaseNoPool(): Object 0x350270 of class NSCFString autoreleased with no pool in place - 我的申请结构如下,
核心部分是用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];}

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

总结

以上是内存溢出为你收集整理的多线程 – “没有池到位时自动释放”是什么意思?全部内容,希望文章能够帮你解决多线程 – “没有池到位时自动释放”是什么意思?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1024003.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存