gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 11:20:58 25 4
gpt4 key购买 nike

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

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/

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