我從服務器獲取圖像時正在執行以下操作。但是這段代碼讓我的應用程序癱瘓了。它凍結了用戶界面。我可以異步UIImageJPEGRepresentation writeToFile嗎?
這可以運行在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];
}
我不明白爲什麼不使用'dispatch_async'。是的,你可以使用異步 –
從你的代碼看起來你沒有在UI部分做任何事情,所以你可以很容易地在後臺執行此代碼。你可以使用dispatch_queues。 – IOSCODER