NSOperation使用
发布日期:2022-03-18 08:27:34 浏览次数:26 分类:技术文章

本文共 2352 字,大约阅读时间需要 7 分钟。

如果使用如下的方式创建了NSOperationQueue,将会在后台线程中执行:

NSOperationQueue *myQueue = [[NSOperationQueue alloc] init];

除非你在使用主线程mainQueue:

NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];

会使用如下的方式使用代码:

NSOperationQueue *myQueue = [[NSOperationQueue alloc] init];[myQueue addOperationWithBlock:^{   // Background work    [[NSOperationQueue mainQueue] addOperationWithBlock:^{        // Main thread work (UI usually)    }];}];

GCD的方式是:

dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void)             {              // Background work                         dispatch_async(dispatch_get_main_queue(), ^(void)              {                   // Main thread work (UI usually)                                        });});

可以在两个operation之间添加依赖关系。

__block NSData *dataFromServer = nil;NSBlockOperation *downloadOperation = [[NSBlockOperation alloc] init];__weak NSBlockOperation *weakDownloadOperation = downloadOperation;[weakDownloadOperation addExecutionBlock:^{ // Download your stuff   // Finally put it on the right place:  dataFromServer = .... }];NSBlockOperation *saveToDataBaseOperation = [[NSBlockOperation alloc] init];__weak NSBlockOperation *weakSaveToDataBaseOperation = saveToDataBaseOperation; [weakSaveToDataBaseOperation addExecutionBlock:^{ // Work with your NSData instance // Save your stuff }];[saveToDataBaseOperation addDependency:downloadOperation];[myQueue addOperation:saveToDataBaseOperation];[myQueue addOperation:downloadOperation];

NSInvocationOperation的使用

- (void) loadData {    /* Operation Queue init (autorelease) */    NSOperationQueue *queue = [NSOperationQueue new];    /* Create our NSInvocationOperation to call loadDataWithOperation, passing in nil */    NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self        selector:@selector(loadDataWithOperation)        object:nil];    /* Add the operation to the queue */    [queue addOperation:operation];    [operation release];}- (void) loadDataWithOperation {    NSURL *dataURL = [NSURL URLWithString:@"http://icodeblog.com/samples/nsoperation/data.plist"];    NSArray *tmp_array = [NSArray arrayWithContentsOfURL:dataURL];    for(NSString *str in tmp_array) {        [self.array addObject:str];    }    [self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];}

转载地址:https://windzen.blog.csdn.net/article/details/47451005 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:iOS文章收集
下一篇:NSTimer与NSRunLoop

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月19日 05时27分57秒