我只是想知道在NSOperationQueue所擁有的NSOperation上執行completionBlock的具體時刻。在NSOperation上執行完成塊是在哪一刻?
在我的最新項目Amazon S3的客戶端(https://github.com/StudioIstanbul/SIAFAWSClient)上,我使用帶有completionBlock的NSOperation來處理對Amazon REST API的請求。客戶端可以通過名爲isBusy的主類上的屬性來監視所有預定請求的狀態。在我的操作的完成塊中,如果在我的NSOperationQueue中沒有安排其他操作,我將此屬性的值設置爲NO。我現在發現,在少數情況下,當CompletionBlock被調用時,我的當前NSOperation仍然包含在我的NSOperationQueue中。這對我來說似乎有點奇怪。我最終在隊列中檢查了當前NSOperation的存在以解決這個問題,但從設計的角度來看這似乎沒有必要。
__weak AWSOperation* thisOperation = operation;
[operation setCompletionBlock:^{
if (self.operationQueue.operationCount <= 0
|| (self.operationQueue.operationCount == 1
&& [self.operationQueue.operations objectAtIndex:0] == thisOperation)) {
[self willChangeValueForKey:@"isBusy"];
_isBusy = NO;
[self didChangeValueForKey:@"isBusy"];
}
}];
有沒有人有關於此行爲的更多信息?
但是這並不是說它不能保證在拆除手術後運行。我也很驚訝。 –
它明確表示不能保證它的運行時間,因爲它將運行的線程不能保證 – Wain
是的,但是在運行的任何線程上,它可以在刪除後啓動。 –