2013-05-21 3 views
2

ABAddressBookRef은 하나의 스레드에서만 액세스 할 수 있습니다. 좋은 모델은 메인 스레드 외에 백그라운드에서 ABAddressBookRef을위한 스레드를 가질 것이라고 생각합니다.NSOperationQueue가 단 하나의 스레드 만 사용하도록하려면 어떻게합니까?

NSOperationQueue을 사용하는 동안 스레드가 하나만 있는지 어떻게 확인합니까? 최대 동시성을 1로 설정해도 동일한 스레드에서 실행되는 것은 아닙니다.

웹 스레드와 같은 다른 고유 한 스레드를 사용해야합니까?

답변

1

스레드를 수동으로 생성하고 모든 주소록 액세스를 직접 리디렉션 할 수 있습니다.

이 (adapted from documentation) 같은과 스레드을 만들 :

NSThread* myThread = [[NSThread alloc] initWithTarget:[MyThread new] 
            selector:@selector(myThreadMainMethod) 
            object:nil]; 
[myThread start]; // Actually create the thread 

주 스레드가 도움이 될 수 있도록, 당신이 스레드의 주요 방법의 실행 루프을 구현 에 있다고.

See example implementation of run loop in this answer.

그런 다음 수 에이 NSObject의 방법 performSelector:onThread:withObject:waitUntilDone:를 사용하여이 스레드에 물건을 할 수 있습니다.

다음은이 개념을 구현하는 ABAddressBookRef의 래퍼 라이브러리입니다 (RHAddressBook).

+1

링크 된 라이센스로 인해 많은 상용구가 허용되지 않는다고 생각됩니다. 링크에서 직접 복사하지 않고 코드 예제를 추가하겠습니다. –