每当用户单击我应用程序中的某个选项卡时,我都试图将用户列表(具有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/

10-09 18:41