每当用户单击我应用程序中的某个选项卡时,我都试图将用户列表(具有UIImage属性)保存到NSUserdefault。
在“用户”对象中,我实现了如下所示的编码:
- (void)encodeWithCoder:(NSCoder *)encoder
{
NSURL *url = [NSURL URLWithString:self.avatar_url];
NSData *data = [NSData dataWithContentsOfURL:url];
self.avatar = [[[UIImage alloc] initWithData:data] autorelease];
[encoder encodeObject:UIImagePNGRepresentation(self.avatar) forKey:@"avatar"];
}
但是,我意识到通过执行此操作,我的应用程序在单击触发保存到NSUserdefault的选项卡后挂起。我将性能下降归因于URL转换UIImage的过程。
有没有一种方法可以加快将图像编码和保存到NSUserdefault的过程(不会导致应用滞后)。
最佳答案
之所以缓慢,是因为您在映像下载之前就阻塞了主线程。每当执行依赖网络 Activity 的操作时,都应将其移至后台线程。正如@Richard J. Rosss III指出的那样,您可以直接保存数据,除非您绝对需要png且原始格式不是png,否则几乎没有理由先转换为图像然后再转换为数据。
Concurrency Programming Guide
关于objective-c - 尝试对UIImage进行编码并将其存储到NSUserdefault时,应用程序变慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7982813/