Nik*_*iko 2 xcode objective-c nsoperation nsoperationqueue
我正在尝试创建一个NSOperationQueue并为其添加一个NSOperation.后来我不想检查队列是否正在运行并且可能中止它.所有这些都应该从不同的函数中调用.这样做的最佳方法是什么?我会很高兴一个代码示例.谢谢!
我会创建一个由单例管理的操作队列.
首先,创建你的单例类.它将提供访问NSOperationQueue.我们打电话给单身人士MyGlobalQueueManager.
它会有一个ivar叫myGlobalQueue:
@property (nonatomic) NSOperationQueue* myGlobalQueue;
Run Code Online (Sandbox Code Playgroud)
在.m文件中MyGlobalQueueManager,创建一个相当标准的init方法来设置操作队列:
- (id)init
{
self = [super init];
if (self)
{
myGlobalOperationQueue = [[NSOperationQueue alloc] init];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
现在,将自身提供为单例的方法.同样,这是非常标准的东西:
+ (MyGlobalQueueManager *)sharedInstance
{
static MyGlobalQueueManager *sharedInstance = nil;
static dispatch_once_t isDispatched;
dispatch_once(&isDispatched, ^
{
sharedInstance = [[MyGlobalQueueManager alloc] init];
});
return sharedInstance;
}
Run Code Online (Sandbox Code Playgroud)
让我们从您想要使用它的任何地方访问该队列:
MyGlobalQueueManager* myGlobalQueueManager = [MyGlobalQueueManager sharedInstance];
NSOperationQueue *myGlobalQueue = myGlobalQueueManager.myGlobalOperationQueue;
Run Code Online (Sandbox Code Playgroud)
然后,您可以根据自己的喜好向该队列添加操作.
如何知道是否有任何排队?
NSUInteger count = [myGlobalQueue operationCount];
Run Code Online (Sandbox Code Playgroud)
如何中止?取消所有内容如下:
[myGlobalQueue cancelAllOperations];
Run Code Online (Sandbox Code Playgroud)
取消当然取决于操作.如果您正在编写自定义NSOperation类,则需要自己处理.
我发现NSOperation并且NSOperationQueue相当容易使用且非常简单.
阅读所有这些的一个很棒的文档是并发编程指南.具体来说,看一下Operation Queues
| 归档时间: |
|
| 查看次数: |
2622 次 |
| 最近记录: |