NSOperation 및 NSOperationQueue (2D 게임용)를 사용하여 백그라운드에서 이미지를로드하고 있습니다. 방법 NSOperations을 이해하려면NSOperationQueue 관련없는 NSOperationQueue를 차단 하시겠습니까?
(나는 모든 이미지의로드를 시작하기 전에 -startNewEndlessBackgroundTask 방법 전화) 나는 다음과 관련이없는 NSOperationQueue/NSOperation를 추가 해봤 동작 : 이미지 로딩을위한
static int stop = NO;
static int c = 1000;
-(void)takeTime {
stop = NO;
while (!stop) {
for (int i = 0; i < 10000; i++) {
c += 1;
}
c = c;
}
}
-(void)stopBackgroundTask {
stop = YES;
}
-(void)startNewEndlessBackgroundTask {
//[self performSelectorInBackground:@selector(takeTime) withObject:nil];
NSOperationQueue* queue = [[NSOperationQueue alloc] init];
[queue addOperationWithBlock:^{
[self takeTime];
}];
}
이 완전히 블록 내 다른 NSOperationQueue를 iPhone4에서. iPhone4s에서는 startNewEndlessBackgroundTask를 2 번 호출하면 이미지 로딩이 차단됩니다. 둘 다 iOS 6을 실행 중입니다.
내 앱의 메인 루프가 차단되지 않았습니다.
대신 performSelectorInBackground를 사용하여 takeTime을 호출하면 모든 것이 차단없이 작동하고 takeTime 루틴도 백그라운드에서 올바르게 작동합니다.
왜 두 개의 NSOperationQueue가 완전히 별도로 alloc-init'ted이고 종속성이없는 경우 이런 일이 발생할 수 있습니까? 나에게있어,이 간단한 방법으로 NSOperationQueue를 사용하는 것과 performSelectorInBackground를 사용하는 것 사이의 차이가 없어야한다. 그러나 내가 오해하고있는 근본적인 것이 있다고 생각한다.