2012-02-23 11 views
0

私はclassAにコールバックオーディオ機能を持っています。彼は多くの時間をclass B関数に呼び出し、それをオーディオレベルの引数として与えます。オーディオ付きマルチスレッド

問題は、それが第二何度も起こるということですので、私はこの取得:

[NSThread detachNewThreadSelector:@selector(setMovement:) toTarget:self withObject:nil]; 
:私はと、別のスレッドにあるように、このクラスのいずれかを設定する必要があります知っている

class __NSCFString autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug 

しかし、私はそれをどのように正確に行い、その行(どこのクラス)を置くべきかわかりません。 私はクラスBのinitに入れてみましたが、それでも警告を受け取ります。

iphoneのクラッシュで、その動作をシミュレーションします。 私はコールの数を減らす場合のみ、私はデバイスに置くことができます。

このスレッドをどのように正確に設定すればよいですか? (クラスがでたシーンですcocos2d-が、私はthatsの問題を考えていけない)

おかげでたくさん/

答えて

0

私が、私はそれを理解してほしい、クラスAとクラスBの役割が何であるかをあなたのポストから明らかではないが、クラスAのコードは、いくつかのオーディオコンテキストでclassBメソッドを繰り返し呼び出すことを示しています。

また、これらの呼び出しのソースはコードではなく、むしろシステムコール、またはオーディオシステムからの外部呼び出しであると思います。

この場合、オーディオコールは、自動解放プールを持たないスレッドのコンテキストで発生している可能性があります。クラスBメソッドでコードを書くときには、自動解放されたオブジェクト([NSString stringWithFormat:@ "... ..."、...]など)とこれらのリークが発生する可能性があります。

ここでは、新しいスレッドを切り離すべき理由はわかりません---問題がリークの場合は、Class-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 
関連する問題