我正在使用主细节控制器。在主列表中有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/

10-16 05:37