Ios 保存图像时用户界面冻结

Ios 保存图像时用户界面冻结,ios,uiimage,nskeyedarchiver,datapersistance,Ios,Uiimage,Nskeyedarchiver,Datapersistance,我正在尝试保存一个包含30个图像的NSDictionary。我正在调用将字典保存在ViewController的ViewDidEnglish中的方法。问题是UI在保存时冻结。这是一个小滞后,不到一秒钟,但有点烦人。你有什么办法让它更流畅吗?也许我应该异步保存字典,也许在一个块中,但我不知道如何使用它们 以下是我的保存和获取方法: + (NSDictionary*)getProgramImages{ NSString *path = [DataManager getProgramImage

我正在尝试保存一个包含30个图像的NSDictionary。我正在调用将字典保存在ViewController的ViewDidEnglish中的方法。问题是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];
}
非常感谢你的帮助


Boris

也许
dispatch\u async
可以帮助您平滑主线程上运行的代码

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

也许
dispatch\u async
可以帮助您平滑主线程上运行的代码

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

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

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

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

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

有很多方法可以解决你的问题。你应该看看这个


大中央调度是一个不错的选择。

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


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

问题在于您正在主线程上调用save函数,如果太重,会冻结UI。阅读更多关于线程的信息:问题是您正在主线程上调用save函数,如果UI太重,它会冻结UI。请在此处阅读有关线程的更多信息: