Tie*_*eme 2 multithreading cocoa-touch objective-c grand-central-dispatch ios
在我的应用程序中,我使用了performSelectorInBackground:从磁盘加载图像.在使用dispatch_async进行一些单元测试后,我决定用dispatch_async调用替换我的performSelectorInBackground.
dispatch_queue_t currentBackgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_async(currentBackgroundQueue, ^{
[self getImageFromDisk:sPath delegate:(id)delegate];
});
Run Code Online (Sandbox Code Playgroud)
代码似乎工作,但现在我的图像加载速度比以前慢.当用户滚动图像时,这会导致黑色图像.
我的应用程序包含某种photoscroller.我不能使用apple的平铺示例代码,因为它会将应用程序大小增加到很多.我使用此代码段从磁盘加载图像.
我之前在其他类似问题上说过这一点,在全局队列上使用dispatch async会导致同步行为,特别是对于最终更新UI的代码.YMMV,但是当我尝试它时,它或多或少与同步调用相同.使用NSOperations创建和使用您自己的队列,或(创建并使用您自己的队列).
我相信这样做的原因是,发布到全局队列的任何事件都将消耗队列处理时间,即使代码在技术上是异步的.不要将全局队列用于后台操作.
使用自定义队列并泵送您自己的runloop.
| 归档时间: |
|
| 查看次数: |
1522 次 |
| 最近记录: |