objective-c - 管理多个异步 NSURLConnection 连接

标签 objective-c iphone cocoa cocoa-touch nsurlconnection

我的类里面有大量重复代码,如下所示:

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request
                                                              delegate:self];

异步请求的问题是,当您有各种请求发出时,并且您有一个委托(delegate)将它们全部视为一个实体,大量分支和丑陋的代码开始制定:

我们要返回什么样的数据?如果它包含这个,那就做那个,否则做其他。我认为能够标记这些异步请求会很有用,就像您能够使用 ID 标记 View 一样。

我很好奇什么策略对于管理处理多个异步请求的类最有效。

最佳答案

我在 CFMutableDictionaryRef 中跟踪响应,该 CFMutableDictionaryRef 由与其关联的 NSURLConnection 键入。即:

connectionToInfoMapping =
    CFDictionaryCreateMutable(
        kCFAllocatorDefault,
        0,
        &kCFTypeDictionaryKeyCallBacks,
        &kCFTypeDictionaryValueCallBacks);

使用它而不是 NSMutableDictionary 可能看起来很奇怪,但我这样做是因为这个 CFDictionary 只保留它的键(NSURLConnection),而 NSDictionary 复制它的键(而 NSURLConnection 不支持复制)。

完成后:

CFDictionaryAddValue(
    connectionToInfoMapping,
    connection,
    [NSMutableDictionary
        dictionaryWithObject:[NSMutableData data]
        forKey:@"receivedData"]);

现在我有一个用于每个连接的“信息”数据字典,我可以使用它来跟踪有关连接的信息,并且“信息”字典已经包含一个可变数据对象,我可以使用它来存储回复数据进来。

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    NSMutableDictionary *connectionInfo =
        CFDictionaryGetValue(connectionToInfoMapping, connection);
    [[connectionInfo objectForKey:@"receivedData"] appendData:data];
}

关于objective-c - 管理多个异步 NSURLConnection 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/332276/

相关文章:

iphone - xPath 分组如何?

objective-c - Core-Plot:如何在 CPLayerHostingView 上添加按钮

macos - 有没有办法遍历 Mac OS X 中所有打开的窗口?

html - 如何获得 HTML 属性文本的真实高度

iphone - 基于 NSStrings 数组从对象的 NSArray 中提取字符串

iphone - SBJSON 解析器内存不足警告

objective-c - 使用 NSDocument 打开任何文件夹

objective-c - 超时在 NSAppleScript 中没有效果

objective-c - Xcode 4.5.2 - OS X 应用程序 - 将 webview 链接到代码,加载手动编码的主页

objective-c - 使用 Doxygen 使用 @see 命令引用特定的类方法