gpt4 book ai didi

ios - NSOperation 中的 AFHttpRequestOperation

转载 作者:行者123 更新时间:2023-11-29 02:55:26 25 4
gpt4 key购买 nike

使用 iOS 有一段时间了,但现在我在一个复杂的客户端-服务器应用程序中工作,这需要我:

  • 向服务器发送请求(使用 AFHttpRequestOperation)响应是一个区间或一个字典

  • 如果我得到一个间隔,我需要等待(间隔)-seconds 并再次调用服务器(等待/ sleep ?)

  • 这一直持续到我收到过期消息、用户取消或收到字典(如上所述)为止。

  • 如果收到字典,我必须暂停对服务器的调用,直到用户对我显示给他的信息采取行动。

  • 根据用户的决定,我需要恢复并继续调用、等待、调用等,直到我收到字典或它过期(如果用户拒绝信息)或者如果用户接受,停止询问并进一步处理信息(但我不会一直调用服务)

作为 iOS 中线程的新手,最好的方法是什么:?我一直在使用 dispatch_asynch + performSelector:onThread:withObject 但它给我带来了各种各样的问题!

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

我是线程方面的新手,尤其是在 iOS 下,非常感谢您的帮助!!!!

最佳答案

我建议不要将线程与网络一起使用。虽然看起来不够清楚,但实现异步网络请求占用的 CPU 时间非常少。
很多人都尝试这样做,但最终以异步网络调用的委托(delegate)方法未被调用而告终。如果在后台线程上执行网络调用,则该线程可能会在委托(delegate)完成调用之前退出。
只需调用取消/暂停方法即可取消异步调用。
如果您觉得主线程很慢,请确保避免对其进行繁重的操作,例如解析、调用 CameraView。
我使用 NSrunLoop 只是为了测试如何做到这一点,没有太多优势

 -(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];
}

您可以将 native API 替换为您的库 API。希望这能以某种方式有所帮助。

关于ios - NSOperation 中的 AFHttpRequestOperation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23957302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com