我在 SO 中进行了很多搜索,但我找不到我的问题的正确答案。
这里的问题:
我正在寻找在 NSOperation
中发送多个上传请求的正确机制。子类。特别是,此类在其main
中执行两个不同的操作。方法:
因为,这两个操作可能需要一些时间来执行,所以我将它们包装在
NSOperation
中,如前所述。 .为了上传数据,我决定采用同步模式(我需要将我的应用程序与已成功提交到 Web 服务器的上传请求的数量同步)。
为了执行类似的上传,我以如下同步方式使用 ASIHttpRequest。
for (int i = 0; i < numberOfUploads; i++) {
// 1-grab data here...
// 2-send data here
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request startSynchronous];
NSError *error = [request error];
if (!error) {
int response = [request responseStatusCode];
if(response == 200)
uploads++;
}
}
所以,我的问题是:
ASIHTTPRequest *request
是否有效在后台线程中? 备注 我将 ASIHttpRequest 用于同步请求,但我认为
NSUrlConnection
可以应用相同的模式上课通过sendSynchronousRequest:returningResponse:error:
先感谢您。
最佳答案
直接回答您的问题:
NSUrlConnection
(在您的情况下,ASI 包装器)具有同步调用在 NSOperation
中有效. NSUrlConnections
在后台线程中,但这里有几件事要记住:如果在后台线程上使用它,则必须调用同步方法,或者必须自己保持线程处于事件状态。使用
async
在 NSOperation
在这里解释得很好:How do I do an Asychronous NSURLConnection inside an NSOperation?我已经使用了这种模式并且效果很好。NSUrlConnnection
委托(delegate)回调回调到 NSUrlConnection
的线程。创建于。只是要记住的东西。 async
模式,但你可以。异步模式提供了更大的灵 active 。例如,如果您需要取消操作,您可以取消 NSUrlConnection
请求 async
图案。使用同步模式,你不得不让它运行(除非你明确地杀死线程)。 注意:我会重新考虑使用 ASI,因为它不再受支持。
AFNetworking
似乎是最受欢迎的替代品,虽然我选择开始使用 NSUrlConnection
直接地。
关于ios - 在 NSOperation 子类 : sync or async pattern? 中发送多个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9893149/