2013-03-14 62 views
2
NSDate *dateStartAutoComplete = [NSDate date]; 

[[NSOperationQueue new]addOperationWithBlock:^{ 
    NSTimeInterval startFetching = [NSDate.date timeIntervalSinceDate:dateStartAutoComplete]; 
    PO(@(startFetching)); 

...我們如何設置[[NSOperationQueue new] addOperationWithBlock的優先級:?

結果:

2013-03-15 06:00:12.413 BadgerNew[4120:907] @(tiTotalTime): 0.353954017162323 
2013-03-15 06:00:13.476 BadgerNew[4120:8d23] @(startFetching): 0.106734037399292 
2013-03-15 06:00:13.502 BadgerNew[4120:8d23] @(finishFetching): 0.1373000144958496 
2013-03-15 06:00:13.717 BadgerNew[4120:907] @(tiTotalTime): 0.3521299958229065 
2013-03-15 06:00:13.869 BadgerNew[4120:675b] @(startFetching): 0.3048880100250244 
2013-03-15 06:00:13.918 BadgerNew[4120:675b] @(finishFetching): 0.3537369966506958 
2013-03-15 06:00:14.018 BadgerNew[4120:907] @(tiTotalTime): 0.454010009765625 
2013-03-15 06:00:16.317 BadgerNew[4120:8847] @(startFetching): 1.014970004558563 
2013-03-15 06:00:16.375 BadgerNew[4120:8847] @(finishFetching): 1.072436988353729 
2013-03-15 06:00:16.661 BadgerNew[4120:8d23] @(startFetching): 1.045746028423309 
2013-03-15 06:00:16.691 BadgerNew[4120:8d23] @(finishFetching): 1.07514101266861 
2013-03-15 06:00:16.721 BadgerNew[4120:907] @(tiTotalTime): 1.419299006462097 
2013-03-15 06:00:16.759 BadgerNew[4120:907] @(tiTotalTime): 1.142507016658783 
2013-03-15 06:00:19.709 BadgerNew[4120:8847] @(startFetching): 1.773845970630646 
2013-03-15 06:00:19.795 BadgerNew[4120:8847] @(finishFetching): 1.860616981983185 
2013-03-15 06:00:19.900 BadgerNew[4120:907] @(tiTotalTime): 1.965098977088928 

花了1.4秒之間,我們開始執行櫃檯,並在NSOperationQueue運作。

它甚至不是單線程隊列。

回答

6

NSOperation類包含設置操作優先級的方法。您應該能夠使用操作上的setQueuePriority:(NSOperationQueuePriority)priority方法來設置操作優先級。 documentation可以給你更多關於該方法所需常量的細節。

由於您正在將操作添加到隊列中,所以您無法設置優先級,並且無論如何您都無法獲取對隊列創建的對象的引用。相反,您應該提前創建一個NSBlockOperation並將其添加到隊列中。

+0

事情是我使用NSOperationQueue,而不是NSOperation。那麼我該怎麼做呢? – 2013-03-15 02:52:18

+0

@Jim'addOperationWithBlock'方法將塊包裝在一個操作對象中。但是,您無法獲得對該對象的引用,無論如何你真的無法做任何事情。 [一旦操作是隊列就不應該被修改。](http://developer.apple.com/library/mac/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationObjects/OperationObjects.html#//apple_ref/doc/uid/TP40008091-CH101-SW1) – 2013-03-15 03:45:28

+0

NSBlockOperation是一個絕妙的主意。謝謝布萊克! – lehn0058 2015-04-29 21:40:43