首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSOperation + NSURLConnection

NSOperation + NSURLConnection
EN

Stack Overflow用户
提问于 2015-01-09 12:20:05
回答 1查看 878关注 0票数 1

我已经在这个类中创建了NSOperation类,我调用NSURLConnection来获取一些数据。我使用NSURLConnection类中的主线程调用NSOperationNSURLConnection的委托被设置为NSOperation类对象。来自NSURLConnection的调用是在主线程上进行的。我需要使用相同的操作线程来处理这些数据。如何实现?

代码语言:javascript
复制
@implementation  ModelCreationSearchOperation {
    int try;
}

- (BOOL)isConcurrent
{
    return YES;
}

- (void)start
{
    [self willChangeValueForKey:@"isExecuting"];
    _isExecuting = YES;
    [self didChangeValueForKey:@"isExecuting"];

    dispatch_async(dispatch_get_main_queue(), ^{
        if (self.isCancelled) {
            [self finish];
            return;
        }
    });

    [self fetchData];
}

-(void)fetchData {
    dispatch_async(dispatch_get_main_queue(), ^{
        self.connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
    });
}

- (void)finish
{
    [self willChangeValueForKey:@"isExecuting"];
    [self willChangeValueForKey:@"isFinished"];

    _isExecuting = NO;
    _isFinished = YES;

    [self didChangeValueForKey:@"isExecuting"];
    [self didChangeValueForKey:@"isFinished"];

    [self cancel];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    //Main thread
    //Want to perform parsing of response data on operation thread ....
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-09 13:06:44

您说您“希望在操作线程上执行响应数据的解析”。您真的需要在操作线程上运行它,还是只需要将其从主线程中删除?操作队列不一定有一个单独的专用线程,所以这个问题没有什么意义。(它是调度队列和操作队列的优点之一,它为我们管理线程,我们通常不需要涉及这些细节。)

如果您只是希望connectionDidFinishLoading中的代码在后台线程上运行(例如,如果您在此委托方法中执行异常慢的操作),只需将其分派到后台线程(可以使用全局队列)。如果您希望为这些connectionDidFinishLoading调用创建一个串行队列,请为此创建自己的串行队列,并将此代码分派到该队列。但是,如果它在计算上不太密集(例如解析JSON或诸如此类的东西),您通常可以让它在主线程上运行,而不会发生意外。

顺便提一下,如果您真的需要,可以为您的NSURLConnection委托调用创建一个专用线程,并在该线程上安排连接,但这通常是过分的。但是,请参阅AFNetworking代码,例如该实现。这在How do I start an Asychronous NSURLConnection inside an NSOperation?中得到了说明

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27860439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档