2011-03-23 3 views

답변

18

당신은 더 이상 큐에 대한 액세스를 필요로 할 때 당신이 dispatch_release 전화를 안 ...

dispatch_queue_t myQueue = dispatch_queue_create("com.mysite.page", 0); 
dispatch_async(myQueue, ^{}); 
dispatch_release(myQueue); 

로 변경해야합니다. myQueue은 로컬 변수이므로 이어야합니다.

읽기 dispatch_queue_create 문서 :

블록 큐에 제출

토론 FIFO 순서로 한 번에 하나씩 실행됩니다. 그러나 독립 대기열에 제출 된 블록은 서로에 대해 동시에 실행될 수 있습니다.

응용 프로그램이 디스패치 대기열을 더 이상 필요로하지 않으면 dispatch_release 함수를 사용하여 응용 프로그램을 해제해야합니다. 대기열에 제출 된 보류중인 블록은 대기열에 대한 참조를 보유하므로 보류중인 모든 블록이 완료 될 때까지 대기열의 할당이 해제되지 않습니다.

+0

이것은 여전히 ​​사실입니까? ARC를 사용하면 공개 할 필요가 없습니다. – hfossli

4

누수 도구는 코드에서 더 이상 참조가없는 메모리가 할당 된 위치를보고합니다.

작성한 큐에 대한 참조가없고 dispatch_release()가 호출되지 않았기 때문에이 메소드가 실행 된 후에는 누수로 간주됩니다.

+1

ARC조차도 당신을 위해 처리하지 않습니다. 그래서 당신은 또한 그것을 발표해야합니다 : dispatch_release (myQueue) .. – geforce

관련 문제