我想創建一個NSOperationQueue並添加一個NSOperation。後來我不想檢查隊列是否正在運行,可能會中止它。所有這些都應該從不同的功能中調用。什麼是最好的方法來做到這一點?我會爲代碼示例感到高興。謝謝!全球NSOperationQueue
回答
我會創建一個由單例管理的操作隊列。
首先,創建你的單例類。它將提供訪問NSOperationQueue
。我們打電話給單身人士MyGlobalQueueManager
。
這將有ivar
叫myGlobalQueue
:
@property (nonatomic) NSOperationQueue* myGlobalQueue;
在.m
文件MyGlobalQueueManager
,創建一個相當標準的init
方法,將成立一個操作隊列:
- (id)init
{
self = [super init];
if (self)
{
myGlobalOperationQueue = [[NSOperationQueue alloc] init];
}
return self;
}
現在,方法,提供自己作爲一個單身人士。再次,這是相當標準的東西:從無論你想用它排隊
+ (MyGlobalQueueManager *)sharedInstance
{
static MyGlobalQueueManager *sharedInstance = nil;
static dispatch_once_t isDispatched;
dispatch_once(&isDispatched,^
{
sharedInstance = [[MyGlobalQueueManager alloc] init];
});
return sharedInstance;
}
讓我們訪問:
MyGlobalQueueManager* myGlobalQueueManager = [MyGlobalQueueManager sharedInstance];
NSOperationQueue *myGlobalQueue = myGlobalQueueManager.myGlobalOperationQueue;
您可以到該隊列,你看上然後添加操作。
如何知道是否有排隊?
NSUInteger count = [myGlobalQueue operationCount];
如何中止?取消一切如下:
[myGlobalQueue cancelAllOperations];
取消當然取決於操作。如果您正在編寫自定義類NSOperation
,則需要自己處理。
我覺得NSOperation
和NSOperationQueue
是相當容易使用和相當簡單。
一個很棒的文檔可以讀取所有這些是併發編程指南。具體來說,看看Operation Queues
嗨@Max MacLeod如果我有兩個uicontrollers,並在第一個viewWillDisappear調用函數cancelAllOperations Singleton的隊列它會影響NSOpearation,我開始在第二視圖控制器的viewdidload首先是由導航控制器推第二? –
在這種情況下,我會在每個視圖控制器中有一個隊列。否則它變得更加複雜。看看Apple提供的MVCNetworking示例項目。它演示了一個運行三到四個不同隊列的網絡管理員單身人士。 –
更簡單的方法是做一個「全局可見」的功能。 AKA,聲明它在公共標題:
extern NSOperationQueue * SharedQueue();
和你的編譯 「單位」 中定義 - 但外任何@implementation
。
NSOperationQueue *SharedOperationQueue()
{
static NSOperationQueue * _SharedQueue = nil;
return _SharedQueue ?: ^{ _SharedQueue = NSOperationQueue.new;
_SharedQueue.maxConcurrentOperationCount = NSOperationQueueDefaultMaxConcurrentOperationCount;
return _SharedQueue;
}();
}
作爲一個小的獎金.. #define
它的「別名」 ..你真的可以濫用它!
#define MY_SOQ SharedOperationQueue()
[MY_SOQ addOperationWithBlock:^{ /* GO CRAZY */ }];
- 1. 創建全球NSOperationQueue
- 2. NSOperationQueue和傳球數據
- 3. 私人全球與公共全球
- 4. 什麼是:全球(冒號全球)呢?
- 5. 線程安全:NSOperationQueue + [陣列ADDOBJECT]
- 6. 枚舉[NSOperationQueue操作]是否安全?
- 7. wpf類全球?
- 8. Python超全球?
- 9. 全球KeyLogger
- 10. WCF全球化
- 11. 全球Substitution
- 12. app.config全球化
- 13. GetSystemTimeZones全球化()
- 14. 全球資格
- 15. _CRT_SECURE_NO_DEPRECATE全球?
- 16. App_GlobalResources全球化
- 17. 在全球VAR
- 18. 從全球
- 19. 全球會議?
- 20. away3d全球coordiantes?
- 21. 全球功能
- 22. 約Playframework全球
- 23. c#全球化
- 24. 全球的ErrorHandler
- 25. RichTextBox全球化
- 26. Jquery全球化
- 27. AS3 - 全球課?
- 28. 全球postbuildevent
- 29. NSOperationQueue阻止無關的NSOperationQueue?
- 30. malloc全球陣列
它沒有真正回答你的問題,但Grand Central Dispatch提供了開箱即用的全局隊列。 – gcamp
這可能是我正在尋找的答案。非常感謝你! – Linus
我設法創建並添加了一個隊列,但我無法弄清楚如何取消隊列中的任務。 – Linus