我的应用程序从服务器、数据和数据描述符下载多个资源。这些由用户操作触发的下载可以同时执行,比方说,一次最多可以下载 50 次。所有这些异步任务最终都会在内存中创建对象(例如,将叶子附加到数据结构,例如将键添加到可变字典或将对象添加到数组)。我的问题是:这会导致稳定性问题吗?例如,如果多个并发任务试图向同一个字典添加键,我是否应该处理这种情况,放置某种锁?如果我实现一个在数组中查找图形元素的 for 循环,其他正在运行的任务是否有可能在该循环“期间”更改数组内容?除官方文档外,关于此多任务、多线程问题的任何引用或主要、一般方向?
最佳答案
取决于您处理下载的方式 - 如果您使用 NSURLConnection,它会为您处理单独的线程/并发,并且您的代码是可重入的,因此您不必担心同步操作。 如果您正在创建自己的线程,则可能会遇到问题。
编辑: 您的代码在主线程(主运行循环)中运行,假设您有一个也在运行的 NSURLConnection 然后它将在一个单独的线程中运行。但是,处理连接进行时发生的事件的委托(delegate)代码在您的运行循环中运行,而不是在其他线程中运行。这意味着您的代码一次只能执行一件事。连接成功方法不会像您的任何其他代码那样同时被调用。如果你有一个 for 循环正在运行,那么它会阻塞你的主线程,直到它完成循环,同时,如果在 for 循环仍在运行时连接完成,那么你的委托(delegate)代码将在循环完成之前不会执行。
关于iOS - 并发访问内存资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11054457/