生活随笔
收集整理的這篇文章主要介紹了
NSOperationQueue线程队列完毕finished状态检测
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
參考:
http://stackoverflow.com/questions/1049001/get-notification-when-nsoperationqueue-finishes-all-tasks
? ? ?多線程編程中,操作隊列NSOperationQueue我們經(jīng)常會用到的,簡化了多線程的操作。至于用法就不多介紹了。這里要說的是隊列執(zhí)行完畢的狀態(tài)檢查。
? ? ? 我們很多時候需要在隊列完成之后再進行操作,而何時隊列完成,NSOperationQueue并沒有內(nèi)置的didFinishedSelector來供使用,因此需要自己去檢查其狀態(tài)。
? ? ? 因為NSOperationQueue兼容?key-value coding (KVC) and key-value observing (KVO)機制,因此我們可以觀察NSOperationQueue的屬性。NSOperationQueue可供監(jiān)控觀察的屬性有:
-
operations?- read-only property
-
operationCount?- read-only property
-
maxConcurrentOperationCount?- readable and writable property
-
suspended?- readable and writable property
-
name?- readable and writable property
實現(xiàn)如下:
1.初始_parseQueue
[cpp] view plaincopy
-?(NSOperationQueue?*)parseQueue??{??????if?(nil?==?_parseQueue)??????{??????????_parseQueue?=?[[NSOperationQueue?alloc]?init];??????????[_parseQueue?setSuspended:YES];????????????????????[_parseQueue?addObserver:self????????????????????????forKeyPath:@"operations"???????????????????????????options:0???????????????????????????context:nil];??????}????????????return?_parseQueue;??}??
2.加入operation
[cpp] view plaincopy
NSInvocationOperation?*operation?=?[[NSInvocationOperation?alloc]?initWithTarget:self?????????????????????????????????????????????????????????????????????????selector:@selector(myTask)????????????????????????????????????????????????????????????????????????????object:nil];??[self.parseQueue?addOperation:operation];??[operation?release];<strong>??rong>??
3.觀察值的改變:
[html] view plaincopy
//KVO,觀察parseQueue是否執(zhí)行完??-?(void)observeValueForKeyPath:(NSString?*)keyPath????????????????????????ofObject:(id)object???????????????????????????change:(NSDictionary?*)change??????????????????????????context:(void?*)context??{??????if?(object?==?self.parseQueue?&&?[keyPath?isEqualToString:@"operations"])??????{??????????if?(0?==?self.parseQueue.operations.count)??????????{??????????????DLog(@"parse?finished");??????????????//other?operation??????????????[_parseQueue?setSuspended:YES];????????????????????????}??????}??????else??????{??????????[super?observeValueForKeyPath:keyPath?ofObject:object?change:change?context:context];??????}??}??
選擇對NSOperationQueue的operations進行觀察,而不選operationCount是因為operationCount需要iOS 4.0以上
總結(jié)
以上是生活随笔為你收集整理的NSOperationQueue线程队列完毕finished状态检测的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。