And*_*ger 21 iphone objective-c grand-central-dispatch ios4 ios
我遇到的唯一功能差异是我可以取消预定的消息performSelector:withObject:afterDelay:.我不知道取消提交的块的方法dispatch_after.(请告诉我是否有办法做到这一点,我不知道).
我想了解更多:
ser*_*gio 19
dispatch_after是Grand Central Dispatch的一部分,它是iOS的扩展,旨在改善多核硬件上的并发代码执行.
但总的来说,我认为它们总体上满足了不同的要求 GCD允许对代码的并发执行进行更精细的分级控制.您可以在队列中调度块,删除它们,暂停,恢复等.这是一个更广泛的主题,在这里一般要考虑.此外,GCD还提供了更多同步选项.
至于与之比较performSelector,我认为dispatch_after正确的一个优点是可以在不需要定义选择器的情况下调度块.见这个讨论.
总而言之,我对GCD没有多少经验,但我会说,除了块调度之外,当你只需要在UI中延迟一些选择器执行时,一般不需要并发性,我会用performSelector.
如果你考虑它,performSelector会给你一个非常差的并发性,因为它只是在最短的时间后调度你的选择器在运行循环上执行.另一方面,dispatch_after给你一个原则上似乎在纳秒级别的控件(!!这是我从Apple文档获得的,但我从未使用它,我不认为在iPhone上你会得到那个,可能在MacOS上).
编辑:关于取消调度一个块,我从来没有尝试从队列中取消dispatch_release调度块,但有可能也允许你控制它.如果没有,您可以为要取消的块定义自定义队列并释放整个队列(在块开始执行之前),如果这对您有意义的话.
至于性能,我真的不知道performSelector里面是什么,但是如果它调度一个线程,那么Apple 声称用GCD调度一个块只需要15条指令,而创建一个线程要花费数百个.
他们说,除此之外performSelector,不要忘记你可以选择使用NSOperationQueue,这是基于GCD,并有一些开销,但不是那么大.NSOperationQueue肯定提供取消的可能性.
| 归档时间: |
|
| 查看次数: |
7074 次 |
| 最近记录: |