2009-10-01 4 views
0

자정까지 카운트 다운 한 다음 반복해서 경고음을 울리고 시간을 나타내는 레이블을 깜박이는 간단한 응용 프로그램이 있습니다. 따라서 레이블 깜박임은 NSTimer를 사용하며 경고음은 자체 스레드로 이동하므로 순수 C 함수 (시스템 사운드 ID 완료 콜백)는 [NSThread sleepForTimeInterval : ...]을 사용할 수 있습니다. 알람 신호음을 울리는 사이를 약간 기다리십시오. 그래서 실행 중에는 자동 복구 풀이 없다는 오류 메시지가 2 개 표시되고 누출됩니다. 왜냐하면 내가 새 스레드를 호출하는 메서드에서 시스템 사운드 ID (파일 이름과 확장명)를 만드는 데 사용되는 두 개의 "문자열"이 있기 때문입니다. 거기에 autorelease 풀을 사용할 수없는 방법이 있습니까? 그걸 사용하려고하는 유일한 두 가지입니다. 감사.iPhone dev 멀티 스레드, NSAutoreleasePool

아니면 다른 스레드 대신 두 개의 NSTimers를 사용해야합니까?

Ben Gottlieb의 대답은 옳았습니다. 그러나 조금 시간이 걸리기 전에 실제로 코드 실행과 같은 시간에 잠글 때 그 코드와 실제로 동기화되지 않은 것을 잊어 버렸기 때문에 Ben Gottlieb의 답은 옳았습니다. 그리고 그것은 대칭을 만듭니다.

답변

2

그냥 스레드 방식의 오토 릴리즈 풀을 생성 :

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

...thread body...

[pool release];

+0

그와'[풀 드레인]의 차이점은 무엇입니까;'? – mk12

+0

'-drain' 메소드는 더 선호되는 새로운 메소드이며 가비지 콜렉션에서도 잘 작동합니다. 이 방법은 10.4+에서 사용할 수 있습니다. –

+0

나는 아이폰을 사용 중이며 OS X는 사용하지 않는다. – mk12