首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AFHttpRequestOperation内部NSOperation

AFHttpRequestOperation内部NSOperation
EN

Stack Overflow用户
提问于 2014-05-30 14:44:24
回答 1查看 73关注 0票数 0

做iOS已经有一段时间了,但是现在我在一个复杂的客户机服务器应用程序中工作,它要求我:

  • 向服务器发送请求(使用AFHttpRequestOperation) --响应要么是间隔,要么是字典
  • 如果我得到一个间隔,我需要等待(间隔)-seconds并再次调用服务器(等待/睡眠?)
  • 这种情况一直持续到我收到过期消息、用户取消或收到字典(如上所述)为止。
  • 如果收到字典,我必须暂停对服务器的调用,直到用户对我显示给他的信息采取行动。
  • 根据用户的决定,我需要继续进行呼叫、等待、调用等,直到收到字典或字典到期为止(如果用户拒绝了该信息),或者如果用户接受、停止询问和进一步处理信息(但我不会继续调用服务)。

对于iOS中的线程来说,什么是最好的方法:?我一直在使用dispatch_asynch +执行者:onThread:withObject,但是它给我带来了各种各样的问题!

问题是:在内部使用NSOpertation的AFHttpRequestOperation子类中实现暂停、取消、等待/睡眠的最佳方法/方法是什么?

我是一个线程新手,特别是在iOS下,所以你的帮助非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-30 16:49:02

我建议不要使用线程与网络。虽然看起来还不够清楚,但实现异步网络请求所需的CPU时间非常少。

许多人尝试这样做,最后得到异步网络调用的委托方法而不被调用。如果在后台线程上执行网络调用,则该线程可能会在委托调用结束之前退出。

只需调用cancel/pause方法就可以取消异步调用。

如果您觉得主线程非常慢,请确保避免对其进行繁重的操作,比如解析、调用CameraView。

我使用NSrunLoop只是测试如何做到这一点,没有太多的优点。

代码语言:javascript
复制
 -(void)start
{
  [self willChangeValueForKey:@"isExecuting"];
  _isExecuting = YES;
  [self didChangeValueForKey:@"isExecuting"];
  NSURL* url = [[NSURL alloc] initWithString:@"http:your url"];
  NSMutableURLRequest* request = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30];
  connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO]; // ivar
  [request release];
  [url release];

 // Via the run loop 
  NSPort* port = [NSPort port];
  NSRunLoop* runLoop = [NSRunLoop currentRunLoop]; 
  [runLoop addPort:port forMode:NSDefaultRunLoopMode];
  [connection scheduleInRunLoop: runLoop forMode:NSDefaultRunLoopMode];
  [connection start];
  [runLoop run];
}

您可以将本机api替换为库api。希望这能有所帮助。

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

https://stackoverflow.com/questions/23957302

复制
相关文章

相似问题

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