我使用NSOperation和NSOperationQueue(用於2D遊戲)在後臺加載圖像。NSOperationQueue阻止無關的NSOperationQueue?
要了解如何NSOperations行爲,我已經試過加入以下無關NSOperationQueue /的NSOperation(我稱之爲-startNewEndlessBackgroundTask方式在開始任何圖像加載前):
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上,2次調用startNewEndlessBackgroundTask後,它會阻止我的圖像加載。兩者都運行iOS 6.
我的應用程序的主循環未被阻止。
如果我改用performSelectorInBackground來調用takeTime,一切正常,沒有阻塞,並且takeTime例程在後臺也能正常工作。
爲什麼會發生這種情況,當兩個NSOperationQueue完全分開分配並且沒有依賴關係?對我來說,以這種簡單的方式使用NSOperationQueue和使用performSelectorInBackground應該沒有什麼區別,但是我猜這是我誤解的基本原理嗎?