gpt4 book ai didi

ios - 即使在后台线程上,将 UIImage 写入文件也会锁定 UI

转载 作者:可可西里 更新时间:2023-11-01 05:45:11 25 4
gpt4 key购买 nike

我正在使用以下代码保存一些图像,并在后台线程上执行此代码:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^ {
[NSKeyedArchiver archiveRootObject:array_of_objects_implementing_NSCoding toFile:myFile];
});

我在数组中有实现 NSCoding 协议(protocol)的对象,并且这些对象中的每一个都有一个数组以及与之关联的图像。然而,每次我调用它时,当图像足够大时(从照片库中获取的东西),用户界面就会卡住。这是保存图像的代码:

- (void)encodeWithCoder:(NSCoder *)encoder {
NSLog(@"Beginning encoding.");
NSData* imageData = UIImagePNGRepresentation(self.image);
[encoder encodeObject:imageData forKey@"image"];
NSLog(@"Encoding completed.");
}

我通过执行对应用程序的 CPU 使用情况进行了分析,当 UI 卡住时,CPU 使用率飙升至 100%,其中 85% 是针对使用“UIImagePNGRepresentation”的行。此外,当这被称为“开始编码”时。打印到控制台但“编码已完成。”从来没有。

为什么这会锁定 UI,即使它在后台线程上也是如此?

最佳答案

您不应该在后台线程中使用 UIImagePNGRepresentation。 Apple 使一些 UIKit 线程安全,但不是全部。尝试改用 CGImage 或 ImageIO 调用。

关于ios - 即使在后台线程上,将 UIImage 写入文件也会锁定 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16844969/

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