如果希望在 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 策略讓它的內容可以被重複執行。
分享給大家。
沒有留言:
張貼留言