gpt4 book ai didi

ios - 我可以异步UIImageJPEGRepresentation writeToFile吗?

转载 作者:行者123 更新时间:2023-12-01 18:16:19 24 4
gpt4 key购买 nike

从服务器取回图像时,我正在执行以下操作。但是这段代码使我的应用程序崩溃了。它冻结了UI。

可以在iOS的后台线程上运行吗?我可以使用异步吗?

 if (![NSString isEmpty:user.avatarURL])
{
NSString *pathToImage = user.avatarURL;
NSURL *url = [NSURL URLWithString:pathToImage];
NSData *data = [NSData dataWithContentsOfURL:url];
UIImage *image = [[UIImage alloc] initWithData:data];

[[NSUserDefaults standardUserDefaults] setObject:UIImageJPEGRepresentation(image, 1) forKey:kUserImage];

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString* path = [documentsDirectory stringByAppendingPathComponent:@"userAvatar.png" ];
NSData* jpegdata = UIImageJPEGRepresentation(image, 1);
[jpegdata writeToFile:path atomically:YES];
}

最佳答案

正如@valentin所说,您可以在dispatch_async()调用中的if()语句内执行所有操作。

请注意,我怀疑实际上可能会使您减速的是-dataWithContentsOfURL:,而不是UIImageJPEGRepresentation(),因此您需要确保它位于您的dispatch_async内部,而不是外部。

另外,我不清楚您为什么将数据解压缩为图像,然后重新压缩。您将获得工件的效果,并且对于大多数服务,头像图像都将以任何方式进行压缩。

我将执行以下操作:

if (user.avatarURL) 
dispatch_async(dispatch_get_main_queue(), ^{
NSURL *const imageURL = [NSURL URLWithString:user.avatarURL];
if (!imageURL)
return;
NSData *const imageDdata = [NSData dataWithContentsOfURL:imageURL];
if (!imageDdata.length)
return;

[[NSUserDefaults standardUserDefaults] setObject:imageDdata forKey:kUserImage];

[imageDdata writeToFile:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:@"userAvatar.png"] atomically:YES];
});

关于ios - 我可以异步UIImageJPEGRepresentation writeToFile吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21671596/

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