带音频的多线程
问题描述:
我有classA
,它有一个回拨音频功能,他多次拨打class B
函数,并把它作为音频电平的参数。带音频的多线程
的问题是,它发生了很多次第二,所以我得到这样的:
class __NSCFString autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug
我知道我需要设置这个类的一个是在另一个线程,具有:
[NSThread detachNewThreadSelector:@selector(setMovement:) toTarget:self withObject:nil];
但我不知道我是如何做到这一点,以及在哪里放置该行(什么类)。 我曾尝试把它放在B类初始化,但仍然得到警告。
在iPhone上的碰撞,仿真其工作。 只有当我减少电话的数量,我可以把它放在设备上。
究竟如何我这个线程,并设置为哪一类? (类是场景的cocos2d-,但我不认为那件事)
非常感谢/
答
它不是从你的后搞清什么是A类和B类,我希望的角色,我的理解对,你的class-A的代码在某些音频上下文中反复调用classB方法。
我也在这里猜测,这些调用的来源不是你的代码,而是一些系统调用,或者是来自音频系统的一些外部调用。
在这种情况下,可能是因为音频调用来自某个线程的上下文,而该线程没有自动释放池。当你用B类方法编写代码时,你可能会创建自动释放对象(比如[NSString stringWithFormat:@“...。”,...]),这些泄漏是因为没有自动释放池来处理它们。
在这里,我不确定为什么你应该分离一个新的线程---如果你的问题是泄漏,你需要做的就是将B类方法的内容包含在@autoreleasepool {...中。 } 范围。这将有助于释放所有的自动释放对象。
像
@implementation classB
// this is the method being repeatedly called from class A's audio function
-(void)callbackImplementation:(NSInteger)voiceLevel {
@autorelease {
// put all your code here.
}
return;
}
@end