2012-02-23 76 views
0

我有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-,但我不认为那件事)

非常感谢/

回答

0

它不是从你的后搞清什么是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