保存图像时UI冻结

时间:2014-06-13 02:04:34

标签: ios uiimage nskeyedarchiver datapersistance

我正在尝试保存包含30张图片的NSDictionary。我正在调用方法来保存我的ViewController的viewDidDisappear中的字典。问题是UI在保存时冻结。这是一个小的滞后,不到一秒钟,但有点烦人。你有什么想法让它更流畅吗?也许我应该异步保存字典,可能是一个块,但我不知道如何使用它们。

这是我的保存和获取方法:

+ (NSDictionary*)getProgramImages{
    NSString *path = [DataManager getProgramImagesFileDirectory];
    NSDictionary *programImages = [NSKeyedUnarchiver unarchiveObjectWithFile:path];

    return programImages;
}

+ (void)saveProgramImages:(NSDictionary*)programImages{
    NSString *path = [DataManager getProgramImagesFileDirectory];

    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:programImages];
    [data writeToFile:path options:NSDataWritingAtomic error:nil];
}

非常感谢你的帮助!

鲍里斯

3 个答案:

答案 0 :(得分:1)

也许dispatch_async可以帮助您平滑主线程上运行的代码。

 dispatch_async(dispatch_get_main_queue(),^{
        //your code goes here
    });

答案 1 :(得分:1)

您可以尝试使用以下代码包装函数调用,该代码使用Grand Central Dispatch在后台线程上运行该代码。目前无法测试是否可以解决您的问题。

dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    // call that function inside here
});

答案 2 :(得分:1)

有很多方法可以解决您的问题。你应该读这个 Concurrency Programming

Grand Central Dispatch是一个不错的选择。