2012-02-23 2 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에 넣으려고했으나 여전히 그 경고를 얻는다.

아이폰의 충돌, 시뮬레이션 작동에. 전화 번호를 줄이면 장치에 넣을 수 있습니다.

정확하게이 스레드를 어떻게 설정합니까? 그리고 어떤 클래스에 설정합니까? 많은/I 희망 클래스 A와 클래스 B의 역할이 무엇인지

그것은 귀하의 게시물에서 명확하지 않다

답변

0

내가 그것을 이해

감사 (클래스의 장면적인 Cocos2D는-하지만 난 그게 문제를 생각 해달라고입니다) 클래스 A의 코드는 일부 오디오 컨텍스트에서 classB 메서드를 반복적으로 호출합니다.

나는 또한이 호출의 소스가 코드가 아니라 오히려 시스템 호출이거나 오디오 시스템의 일부 외부 호출이라고 생각한다.

그런 경우 오디오 호출이 자동 해제 풀이없는 일부 스레드의 컨텍스트에서 시작된 것일 수 있습니다. 클래스 -B 메소드에서 코드를 작성할 때 autorelease 오브젝트 (예 : [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