我正在创建一个由不同游戏板组成的游戏,这些游戏板作为字典存储在数组中,并存储在json文件中。 json文件很大,数组中有3,000个对象,大小约为23mb。我目前加载此文件的方式是在appDelegate实现文件的didFinishLaunchingWithOptions中,如下所示:
NSString * filePath =[[NSBundle mainBundle] pathForResource:@"words" ofType:@"json"];
NSError * error;
NSString* fileContents =[NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error];
if(error)
{
NSLog(@"Error reading file: %@",error.localizedDescription);
}
NSDictionary *data = (NSDictionary *)[NSJSONSerialization
JSONObjectWithData:[fileContents dataUsingEncoding:NSUTF8StringEncoding]
options:0 error:NULL];
wordsArray = [[NSMutableArray alloc]initWithArray:[data objectForKey:@"results"]];
然后,我可以调用以下命令从应用程序中的任何位置检索数组:
NSArray *wordsArray = appDelegate.wordsArray;
该应用程序的运行效果非常好,除了该应用程序在iPhone 4设备上加载需要花费15秒以上的时间(时间过长),而且我了解到,如此长时间的加载时间可能会导致应用程序被拒绝。
有人可以提出更好的方法来解决这个问题吗,
谢谢
最佳答案
正如Yedidya所建议的那样,您可能想要显示一些有趣的东西来保持用户的参与度。
最重要的是,最重要的是:
performselectorOnBackground
或dispatch_async(some_global_queue)
中的一种执行后台任务。 performselectorOnMainThread
或dispatch_asynch(dispatch_get_main_queue)
返回主屏幕/游戏界面。 要点如下:
//START BUSY CURSOR HERE
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
^{
// Read JSON file here
dispatch_async(dispatch_get_main_queue(),
^{
//STOP BUSY CURSOR
//PERFORM UI UPDATE HERE
});
关于ios - 在应用启动时打开大型json文件,迫使启动时间较长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31384661/