我正在使用主细节控制器。在主列表中有5个项目。选择每个项目时,将进行异步调用。
有一个SingleTon类,可处理所有网络呼叫。
[[MyNetwokCommunication connectionInstance]
makeRequest:"url1" delegate:self];
[[MyNetwokCommunication connectionInstance] makeRequest:"url2" delegate:self];
makeRequest:delegate:
中的实际实现是[[NSURLConnection alloc] initWithRequest:request delegate:self startImmediatley:YES]
。因此,这是处理单例类网络连接的正确方法,因为它可能会覆盖另一个请求的数据部分。
最佳答案
我不是那样做的。
iOS上用于序列化事物的最佳范例是NSOperationQueue。您可以创建并发性为1的队列,然后将NSURLConnection或NSURLSession子级作为NSOperations进行排队。
这使您可以做一些整洁的事情,例如创建依赖于其他操作成功的操作。
这是队列的创建:
@property (strong, nonatomic) NSOperationQueue *queue;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_queue = [[NSOperationQueue alloc] init];
[_queue setMaxConcurrentOperationCount:1];
});
然后创建一个网络操作:
// HTTPOperation.h
#import <Foundation/Foundation.h>
@interface HTTPOperation : NSOperation
@end
//
// HTTPOperation.m
//
#import "HTTPOperation.h"
@implementation HTTPOperation
- (void) main
{
NSURLRequest * urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://google.com"]];
NSURLResponse * response = nil;
NSError * error = nil;
NSData * data = [NSURLConnection sendSynchronousRequest:urlRequest
returningResponse:&response
error:&error];
if (error == nil)
{
// Parse data here
NSLog(@"Completed successfully");
}
}
@end
要执行操作:
- (IBAction)queueHTTP {
HTTPOperation *op = [HTTPOperation new];
[self.queue addOperation:op];
}
您可以从任何地方排队任意数量的队列,它们将顺序执行。我建议观看有关高级NSOperations的WWDC视频:
https://developer.apple.com/videos/wwdc/2015/?id=226
这是非常有益的。
关于ios - 具有单例类的多个NSURLConnection sendAsynchronous请求,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32172694/