gpt4 book ai didi

iphone - NSOperation和NSURLConnection冲突

转载 作者:行者123 更新时间:2023-12-01 19:13:00 24 4
gpt4 key购买 nike

在单独的线程上运行代码的最佳方法是什么?

 NSInvocationOperation *operationToComplete = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(operationMethod) object:nil];
NSOperationQueue *queueToStart=[[NSOperationQueue alloc] init];
[queueToStart addOperation:operationToComplete];

-(void) operationMethod
{
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&_response error:&_error];
}

或者:
 NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request
delegate:self];

我一直在做第二种方式,但是对此有点困惑,或者使用另一种方式来做到这一点。

最佳答案

如果您要调用许多并发请求,则将操作队列与同步请求一起使用可能特别有用。通过操作队列,不仅可以轻松指定并发操作,还可以轻松指定maxConcurrentOperationCount来限制要运行的并发操作数(如果您要解散全部操作,这很重要,因为您只能限制其中的多少个操作)可以与给定的服务器同时运行)。

如果需要 initWithRequest 方法,则后面的示例使用NSURLConnectionDataDelegate很有用(由于多种原因中的任何一种,例如,您想要更新进度 View ,想要执行一些流操作,希望能够取消连接等)。 )。

第三种方法是将initWithRequest方法与NSOperationQueue结合使用,即将NSURLConnection包装在自己的NSOperation中。这结合了这两种技术,提供了NSURLConnectionDataDelegate方法的丰富性(可取消,进度更新等),以及操作队列的功能(将网络请求添加到队列中的能力,您可以为其配置并发度,在操作之间建立依赖性)等),但提供了一个不错的界面。有一些特质可以正确地实现此方法(如果在NSURLConnection中使用NSOperationQueue,则必须安排/创建一个RUNTloop)。因此,如果您想享受这项技术的丰富性而又不致于混淆实现细节,我建议使用第三方库,例如AFNetworking

在回答您的“最佳”问题时,这取决于您要做什么,因为它们各有利弊。但是我更喜欢基于NSOperationNSURLConnection,并且如果要简化开发工作,通常建议使用AFNetworking

顺便说一句,您可能可以简化第一个示例:

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

[queue addOperationWithBlock:^{
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&_response error:&_error];
}];

关于iphone - NSOperation和NSURLConnection冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15152157/

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