有沒有辦法知道何時將某個操作添加到NSOperationQueue
實例? PS:目前,我不想對NSOperationQueue
進行子類化並覆蓋所需的addOperation
API。將操作添加到隊列時,NSOperationQueue(代理/回調/通知)
0
A
回答
0
你可以定期檢查operations
屬性,看看它是否改變了以前的引用(也許用一種運行的方法?)。如果確實如此,則檢查是否添加了操作。
這樣你就不需要子類NSOperationQueue
或覆蓋addOperation
。
0
operations
NSOperationQueue
的屬性是KVO兼容的。這意味着您可以通過addObserverForKeyPath
和observeValueForKeyPath
方法觀察此屬性的內容何時更改。請看下面的代碼片段:
@interface BigBrother : NSObject
//Just a demo method for filling queue with something
- (void) addSomeOperationsAndWaitTillFinished;
@end
@implementation BigBrother
- (void) observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary<NSString *,id> *)change
context:(void *)context
{
//Triggers each time 'operations' property is changed
//(ex. operation is added or finished in this case)
//object is your NSOperationQueue
NSLog(@"Key path:%@\nObject:%@\nChange%@", keyPath, object, change);
}
- (void) addSomeOperationsAndWaitTillFinished
{
NSOperationQueue* queue = [[NSOperationQueue alloc] init];
//Tell the queue we want to know when something happens to 'operations' property
[queue addObserver:self
forKeyPath:@"operations"
options:NSKeyValueObservingOptionNew
context:nil];
for (NSUInteger opNum = 0; opNum < 5; opNum++)
{
[queue addOperationWithBlock:^{sleep(1);}];
}
[queue waitUntilAllOperationsAreFinished];
}
你可以看到它是如何工作的,加入這一行到某處:
[[[BigBrother alloc] init] addSomeOperationsAndWaitTillFinished];
Apple's documentation上鍵 - 值觀察
相關問題
- 1. 星號:將代理添加到隊列
- 2. 將操作添加到Firebase通知
- 3. ios NSOperationQueue,操作全部運行時添加並且不排隊
- 4. 在NSOperationQueue中添加操作
- 5. 通知不添加到隊列
- 6. 在Anylogic中添加/將代理添加到隊列中
- 7. 操作啓動之前的NSOperationQueue回調?
- 8. 將NSOperation依賴項添加到已經在NSOperationQueue中的操作
- 9. 對於iOS NSOperationQueue,隊列何時會刪除操作塊?
- 10. exc_bad_acccess在添加到NSOperationQueue時
- 11. 使用代理,操作和隊列
- 12. 將遠程調用隊列隊列到Python Twisted透視代理?
- 13. 添加回調到jQuery CSS操作
- 14. 將「最終」NS操作添加到未確定操作次數的隊列中
- 15. 將回調添加到動畫隊列 - jQuery
- 16. NSURLConnection不工作在NSBlockOperation而操作添加到NSOperationQueue
- 17. 如何將操作添加到我的通知按鈕?
- 18. NSOperationQueue隊列waitUntilAllOperationsAreFinished掛
- 19. 將隊列添加到隊列中時出錯
- 20. 當完成塊成功時,NSOperationQueue添加新操作
- 21. 創建通過代理回調完成的任務隊列
- 22. 添加回調出隊
- 23. 將操作添加到DefaultMutableTreeNode
- 24. 在請求ASIHTTPRequest或AFNetworking時添加隊列中的操作
- 25. 服務代理隊列消息到達但通知不起作用
- 26. NSOperationQueue操作自我
- 27. NSOperationQueue串行FIFO隊列
- 28. 使用各種調度隊列和NSOperationQueue處理執行時間和性能
- 29. 按鈕不會執行操作時,將項添加到列表
- 30. 時得到通知操作點擊