Objective c 在iOS中实现HTTP post/Get的正确方法
我对iOS非常陌生,正在尝试实现HTTP post/Get通信的最佳方法 问题: 我想进行多个api调用,每个调用都有其单独的响应。我正在尝试编写常见的网络UTIL,理想情况下,它将采用api url,进行调用并将数据返回给调用方。实现它的正确方法是什么??我发现每种方法都有适度的争论和粉丝 备选案文1:Objective c 在iOS中实现HTTP post/Get的正确方法,objective-c,ios,cocoa-touch,Objective C,Ios,Cocoa Touch,我对iOS非常陌生,正在尝试实现HTTP post/Get通信的最佳方法 问题: 我想进行多个api调用,每个调用都有其单独的响应。我正在尝试编写常见的网络UTIL,理想情况下,它将采用api url,进行调用并将数据返回给调用方。实现它的正确方法是什么??我发现每种方法都有适度的争论和粉丝 备选案文1: dispatch_async(aQueue,^{ ...[ make a sync network request get data back] --- perform op
dispatch_async(aQueue,^{
...[ make a sync network request get data back]
--- perform operation on data
--- then pass proceed data UI or set it in model.
dispatch_async(dispatch_get_main_queue()
}
备选案文2:
-(NSString *) postData:(NSDictionary *)data serverUrl:(NSString *)targetUrl
-- call post data method with seperate delegate for each caller
-- start async request
-- on DidFinishedLaunching or OnError check delegate & then
return response back to callback
谢谢你的意见 有一个很棒的库,名为,非常容易实现 它使用块,这大大简化了类之间的数据通信(不需要委托),并且是异步的 用法示例如下:
AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:"www.yourwebsite.com/api"]];
NSDictionary *params = @{
@"position": [NSString stringWithFormat:@"%g", position]
};
[client postPath:@"/api" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
}];
就这么简单!结果直接在调用HTTP Post或Get方法的类中可用
它甚至包括图像和JSON请求、JSON反序列化、带有进度回调的文件下载等等。我认为您的第一个选项不太好。它将阻塞池线程很长一段时间,这是不可取的。在任何环境中实现多线程时,系统提供的池线程不应用于长时间运行的进程。第二个synchronus网络呼叫并没有得到真正的建议,它有自己的缺陷
你的第二个选择更可行。您可以做的一个改进是执行did中发生的工作,完成对GCD线程的启动,并在处理后在主线程上发送数据Quick Think。在MVC设计中,我会更新模型对象。控制器将更新视图。不要将数据传回UI。您可以使用。请参阅该文档、该文档顶部的链接,以及中的
GetController
和PostController
,以演示如何执行GET
和POST
请求。感谢各位,任何对选项1或选项2的投票,我将尝试发布结果。