你需要使用NSURLConnection考虑线程安全吗? - iOS

时间:2012-02-16 21:28:46

标签: ios multithreading asynchronous thread-safety nsurlconnection

我一直想知道一段时间asynchrounous请求是如何与NSURLConnection一起工作的。

例如,假设您在应用程序中运行了多个上载进程,所有上载进程都使用NSURLConnection的不同实例进行初始化。作为上载过程,您的包装器对象将获取调用的NSURLConnection委托方法,如:

-(void)connectionDidFinishLoading:(NSURLConnection*)connection;

假设在所有NSURLConnection包装器对象中共享相同的委托对象,该对象具有数组中所有活动上载的列表,并且当为所有连接调用connectionDidFinishLoading时,它们会进入并从中删除自己的列表共享委托对象。

问题是,当这些连接对象可以访问同一个数组时,您是否必须担心线程安全?或者所有这些委托方法是否以一种你不应该担心线程安全的方式返回主线程?

1 个答案:

答案 0 :(得分:2)

诀窍是在您创建NSURLConnection的线程上调用委托方法,除非您专门更改它,否则将成为主线程。操作系统使用其中一个线程排队API按照每个连接完成的顺序在该线程上反复调用委托方法。

使用NSURLConnection它唯一真正需要线程化的传输。如果传输发生在主线程上,那么在传输过程中,用户将无法与您的iOS应用程序进行交互。使用结果做一些事情需要相对较短的时间,但如果你选择在后台(在不同的线程上)进行处理需要很长时间,那么由你决定。