Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在iOS中实现HTTP post/Get的正确方法_Objective C_Ios_Cocoa Touch - Fatal编程技术网

Objective c 在iOS中实现HTTP post/Get的正确方法

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

我对iOS非常陌生,正在尝试实现HTTP post/Get通信的最佳方法

问题:

我想进行多个api调用,每个调用都有其单独的响应。我正在尝试编写常见的网络UTIL,理想情况下,它将采用api url,进行调用并将数据返回给调用方。实现它的正确方法是什么??我发现每种方法都有适度的争论和粉丝

备选案文1:

 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的投票,我将尝试发布结果。