我发现许多代码示例都是使用NSURL
&发送POST请求。 dispatch_sync
,但没有发送AFHTTPRequestOperationManager
之类的参数。有人会提供参考或代码片段吗?
我需要发送文字,数字和图片。
答案 0 :(得分:1)
如果进行网络请求,则应始终异步执行。如果要在等待来自服务器的响应时阻止UI,请不要使请求同步,而是使其保持异步,但会显示指示用户必须等待响应的UI(例如{{{ 1}}等;您也可以考虑使用MBProgressHUD)。但是不要执行同步请求。这是一个可怕的用户体验,看门狗进程可能会杀死你的应用程序。
如果您绝对必须同步执行请求,而不是创建自己的发布请求,则可以使用AFNetworking,但使用信号量可以使异步请求以同步方式运行。创建一个调度信号量(UIActivityIndicatorView
),在AFNetworking完成块(dispatch_semaphore_create
)内发信号通知,等待异步方法后的信号(dispatch_semaphore_signal
)。
AFNetworking的诀窍在于,您只需要确保dispatch_semaphore_wait
或completionQueue
的{{1}}不是主要队列(即设置为您自己创建的全局队列或队列)。如果您不更改AFHTTPRequestOperationManager
,如果在主队列中使用信号量,则会导致死锁。
但是,再一次,我不能说得足够强烈:从主线程做同步请求的整个概念都是错误的。这是一个可怕的想法。不要这样做。