gpt4 book ai didi

nsurlconnection - 异步 NSURLConnection 方案教程

转载 作者:行者123 更新时间:2023-12-04 07:08:53 27 4
gpt4 key购买 nike

我正在寻找有关使用 NSURLConnection 异步请求的好教程。我一直在 stackoverflow 和谷歌中四处寻找,但找不到。这可能是无数类似此处问题的重复。但请指导我正确的教程,我以前使用过 ASIHTTPRequest,但我以前没有使用过 Apple 提供的库。

最佳答案

我会为您提供一个我自己写的,但是我强烈建议您使用 AFNetworking ,它是 NSURLConnection/NSURLRequest 系统之上的包装器,具有更清晰的流程,您还可以使用基本的 NSURLRequests/Connections 以及常规的 NSOperationQueues。该图书馆还使用 cocoa pod ,老实说,您真的再干净不过了。

NSOperationQueue *mainQueue = [[NSOperationQueue alloc] init];
[mainQueue setMaxConcurrentOperationCount:5];

NSURL *url = [NSURL URLWithString:@"http://192.168.0.63:7070/api/Misc/GetFuelTypes"];

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];

[request setHTTPMethod:@"GET"];
[request setAllHTTPHeaderFields:@{@"Accepts-Encoding": @"gzip", @"Accept": @"application/json"}];

[NSURLConnection sendAsynchronousRequest:request queue:mainQueue completionHandler:^(NSURLResponse *response, NSData *responseData, NSError *error) {
NSHTTPURLResponse *urlResponse = (NSHTTPURLResponse *)response;
if (!error) {
NSLog(@"Status Code: %li %@", (long)urlResponse.statusCode, [NSHTTPURLResponse localizedStringForStatusCode:urlResponse.statusCode]);
NSLog(@"Response Body: %@", [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]);
}
else {
NSLog(@"An error occured, Status Code: %i", urlResponse.statusCode);
NSLog(@"Description: %@", [error localizedDescription]);
NSLog(@"Response Body: %@", [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]);
}
}];

mainQueue 对象用于路由请求和管理一次可以发送的请求数。这可以用在很多方面,我倾向于将它们用于分类请求(身份验证、主、上传队列)

一旦进入 block ,您就可以使用返回的响应构建一个本地 NSHTTPURLResponse。如果您希望返回状态代码,则需要这样做。 (在标准的 NSURLResponse 对象中不存在)

responseData 是通常可以直接转换为字符串或通过反序列化器运行以获得人类可读数据的数据。

非常简单的解释,如果您不知道如何管理来自同一对象的多个请求(可能是我更喜欢 block 的原因),委托(delegate)会给您带来麻烦:-)

就像总是委托(delegate)或阻止一样,您希望在收到响应后触发您的 UI 更新,而不是等待请求完成,如果您正在将数据加载到表中,您将在加载时调用请求并提供某种形式的进度 hud 告诉他们正在发出请求,一旦收到数据,您就删除 hud 并重新加载表数据。 HUD 必须在主线程上调用,所以你肯定需要处理它,我通常只构建扩展并使用 performSelectorOnMainThread,但是更好的方法可能是将你的函数包装在 dispatch_async 中,并调用你的 hud 显示/隐藏代码那个。

关于nsurlconnection - 异步 NSURLConnection 方案教程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14902102/

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