iOS - 并发访问内存资源

标签 ios xcode multithreading locking multitasking

我的应用程序从服务器、数据和数据描述符下载多个资源。这些由用户操作触发的下载可以同时执行,比方说,一次最多可以下载 50 次。所有这些异步任务最终都会在内存中创建对象(例如,将叶子附加到数据结构,例如将键添加到可变字典或将对象添加到数组)。我的问题是:这会导致稳定性问题吗?例如,如果多个并发任务试图向同一个字典添加键,我是否应该处理这种情况,放置某种锁?如果我实现一个在数组中查找图形元素的 for 循环,其他正在运行的任务是否有可能在该循环“期间”更改数组内容?除官方文档外,关于此多任务、多线程问题的任何引用或主要、一般方向?

最佳答案

取决于您处理下载的方式 - 如果您使用 NSURLConnection,它会为您处理单独的线程/并发,并且您的代码是可重入的,因此您不必担心同步操作。 如果您正在创建自己的线程,则可能会遇到问题。

编辑: 您的代码在主线程(主运行循环)中运行,假设您有一个也在运行的 NSURLConnection 然后它将在一个单独的线程中运行。但是,处理连接进行时发生的事件的委托(delegate)代码在您的运行循环中运行,而不是在其他线程中运行。这意味着您的代码一次只能执行一件事。连接成功方法不会像您的任何其他代码那样同时被调用。如果你有一个 for 循环正在运行,那么它会阻塞你的主线程,直到它完成循环,同时,如果在 for 循环仍在运行时连接完成,那么你的委托(delegate)代码将在循环完成之前不会执行。

关于iOS - 并发访问内存资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11054457/

相关文章:

ios - 如何在 UITableView 单元格中设置启用的用户交互

ios - 如何在 Sprite 工具包中呈现模态视图?

java - 如何正确终止/清除/停止/取消从另一个线程启动的线程?

c - omp for 和 omp parallel 的区别

linux - 如何找到一个系统产生的最大线程数?

ios - 如何知道最后一行标签的宽度?

ios - 如果我有 JWPlayerController 的实例,如何找到当前正在播放的文件

iphone - MFMessageComposeViewController 半透明键盘

objective-c - cocoa :如何重新打开关闭的窗口?

xcode - iOS- Storyboard -在 Storyboard 的配置面板中以编程方式使用定义的颜色