gpt4 book ai didi

iphone - 同时执行多个方法的最快方法

转载 作者:可可西里 更新时间:2023-11-01 03:36:50 24 4
gpt4 key购买 nike

我有 4 个方法,每个方法在方法返回之前需要一两秒,这些方法返回 UIImage,我需要这些图像以最快的方式显示。

-(NSMutableArray*)prepareImages{
UIImage *imageToModifyUsingUIImageCategory;

NSMutableArray *imageArray = [[NSMutableArray alloc]initWithObjects:
[imageToModifyUsingUIImageCategory doSomethingAndReturn1],
[imageToModifyUsingUIImageCategory doSomethingAndReturn2],
[imageToModifyUsingUIImageCategory doSomethingAndReturn3],
[imageToModifyUsingUIImageCategory doSomethingAndReturn4],nil];
return imageArray;
}

在上述方法的末尾,我将从该数组中获得 4 张图像。每个“doSomethingAndReturn”方法需要一两秒,这意味着我的 prepareImages 方法将在大约 5 秒内完成执行。太长了吧?

我的问题是,还有什么其他方法可以更快地完成所有这些工作? GCD 适合我吗?怎么办?

任何帮助将不胜感激。谢谢!

最佳答案

假设您不介意在后台按顺序加载图像(而不是并行加载),一个简单的分派(dispatch)到后台队列以运行 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...
});
});

这会将图像加载到低优先级后台队列中,然后在完成后分派(dispatch)回主线程。

如果你想保持这个更低的优先级,你可以使用 DISPATCH_QUEUE_PRIORITY_BACKGROUND,虽然这只在 iOS 4.3 和更高版本中可用。在这种情况下,您应该检查 dispatch_get_global_queue 的返回值,如果它返回 0,您可以回退到其他优先级之一。

如果你想并行加载每个图像,你应该将你的 doSomethingAndReturn 方法转换为 NSOperation 子类并使用 NSOperationQueue 来运行商场。这将需要更多的努力来实现。如果一次处理多个大图像,还要注意内存使用情况。

关于iphone - 同时执行多个方法的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10847525/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com