jan*_*del 6 iphone asynchronous objective-c ios
我有4个方法,每个方法在方法返回之前需要一两秒钟,这些方法返回UIImage,我需要这些图像才能以最快的方式显示.
-(NSMutableArray*)prepareImages{
UIImage *imageToModifyUsingUIImageCategory;
NSMutableArray *imageArray = [[NSMutableArray alloc]initWithObjects:
[imageToModifyUsingUIImageCategory doSomethingAndReturn1],
[imageToModifyUsingUIImageCategory doSomethingAndReturn2],
[imageToModifyUsingUIImageCategory doSomethingAndReturn3],
[imageToModifyUsingUIImageCategory doSomethingAndReturn4],nil];
return imageArray;
}
Run Code Online (Sandbox Code Playgroud)
在上面的方法结束时,我将从该数组中获得4个图像.每个"doSomethingAndReturn"方法需要一prepareImages两秒,意味着我的方法将完成大约5秒的执行.太久了吧?
我的问题是,还有什么方法可以更快地完成所有这些?GCD是我的选择吗?怎么样?
任何帮助将非常感激.谢谢!
Mik*_*ler 16
假设你不介意在后台顺序加载图像(而不是并行加载),那么运行后台队列的简单调度将起到作用prepareImages:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
NSArray *images = [self prepareImages];
// now send the result back to the main thread so we can do
// UIKit stuff
dispatch_async(dispatch_get_main_queue(), ^{
// set the images on your UIImageViews here...
});
});
Run Code Online (Sandbox Code Playgroud)
这将在低优先级后台队列中加载图像,然后在完成后调度回主线程.
如果你想保持这个更低的优先级,你可以使用DISPATCH_QUEUE_PRIORITY_BACKGROUND,虽然这只适用于iOS 4.3及更高版本.dispatch_get_global_queue在这种情况下,您应该检查返回值,如果它返回0,您可以回退其他优先级之一.
如果要并行加载每个图像,则应该将doSomethingAndReturn方法转换为NSOperation子类并使用a NSOperationQueue来运行它们.这需要更多的努力来实施.如果一次处理多个大图像,也要注意内存使用情况.
| 归档时间: |
|
| 查看次数: |
3564 次 |
| 最近记录: |