【发布时间】:2010-10-29 02:14:18
【问题描述】:
我已经看到了一些使用多线程委托与 cocoa 的 URL 加载系统进行异步图像加载的示例。
我认为过程如下。
线程 1: 给线程 2 一个要执行的操作,以及一个线程 2 将在完成后访问的委托。
线程 2: 完成操作后,调用线程 1 传递的委托上的预定义选择器。
我想用我自己的类实现类似的功能(使用委托进行异步处理)。 下面的伪代码类似于上面概述的过程,但为了讨论线程安全,我想把它更详细。
线程 1:
[开始临界区]
设置委托,以便线程 2 可以访问
[结束临界区]
触发操作
-(void) dealloc(委托对象的类)
{
[开始临界区]
将委托设置为 null
[结束临界区]
}
线程 2:
实际运作中
- 完成后.. [开始关键部分]
获得委托
[委托 performSelectorOnMainThread @someSelector];
[结束关键部分]
现在,我担心访问委托的线程安全。 换句话说,当委托对象可以随时离开而无需等待操作完成时,第二个线程如何确保委托仍然有效。
上面的伪代码是我做过的最好的尝试,想知道它是否真的可以工作。 此外,我从未见过任何尝试在类似的工作中使委托线程安全,例如http://www.markj.net/iphone-asynchronous-table-image/ 临界区安全防护不是必须的吗?
谢谢
【问题讨论】:
标签: iphone multithreading delegates