2014年1月30日 星期四

NSBlockOperation 的 re-run

如果希望在 iOS 的程式中動態指定要被執行的多行程式述句(或以「程式塊」來稱呼),其中的一個選擇是使用 NSBlockOperation。

NSBlockOperation 的運用邏輯很簡單,只要使用類別方法的 blockOperationWithBlock: 回傳該類別的實體後,再等到要被執行時傳送 start 訊息給該實體即可。

不過,NSBlockOperation 的實體是不能被 re-run 的。也就是說,第二次傳送 start 訊息後,定義於該實體內的程式塊並不會再被執行。

由於某個原因,我不想變更設計來適應這個特性。怎麼辦呢?我是這樣做的:

NSBlockOperation *blockOperation = [NSBlockOperation new];
[blockOperation addExecutionBlock: [[self.operation executionBlocks] objectAtIndex: 0]];
[blockOperation start];

其中,self.operation 本身是 NSBlockOperation 的實體;為了能重複執行它,在每次需要執行時,我採用這樣的 wrap 策略讓它的內容可以被重複執行。

分享給大家。

沒有留言:

張貼留言