비동기 네트워크 작업을 포함하지만 모두 NSManagedObjectContext
에 액세스해야하는 몇 가지 "하위 작업"에 의존하는 "동기화"작업이 있습니다. NSManagedObjectContext
s의 스레딩 요구 사항으로 인해 이러한 하위 작업 모두가 동일한 스레드에서 실행되어야합니다. 이러한 작업 중 일부에서 처리되는 양 때문에 백그라운드 스레드에 있어야합니다. 순간 어떻게 NSRunLoop을 시작하고 NSAutoreleasePool이 비어 있는지 확인하십시오.
SyncEngine
개체의
-init
방법이 작업을 수행하여 새 스레드를 시작 해요 :
[self performSelectorInBackground:@selector(initializeSyncThread) withObject:nil];
는 -initializeSyncThread
방법은 다음과 같습니다
- (void)initializeSyncThread
{
self.syncThread = [NSThread currentThread];
self.managedObjectContext = [(MyAppDelegate *)[UIApplication sharedApplication].delegate createManagedObjectContext];
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
[runLoop run];
}
는 이것을인가 이 스레드에 대해 NSRunLoop
을 시작하는 올바른 방법은 무엇입니까? 그것을 할 수있는 더 좋은 방법이 있습니까? 실행 루프는 'performSelector'소스를 처리하기 만하면되며, 프로세스의 수명 동안 처리해야합니다.
NSAutoreleasePool
을 설정할 때 루프 실행 관찰자를 사용하여 자동 실행 풀을 만들고이를 실행 한 후에 배출해야합니까?
나는 백그라운드 스레드에 자동 복구 풀이 필요한 7-8 가지 방법이있다. CocoaTouch가 Main Thread를 위해하는 것처럼 실행 루프 자체에서 설정하고 배수 할 수있는 방법이 있다면 분명 바람직 할 것입니다. –
실행 루프 관측기를 사용하여 이벤트 처리가 완료된 시점을 알 수 있다고 생각합니다. 자세한 정보는 Apple 문서를 참조하십시오. – InFreefall