为什么方法执行缓慢?

时间:2013-07-17 02:46:27

标签: ios nsurlconnection nsurlrequest

服务器上有一个JSON文件,其中包含四个关于app中数据版本的“键/值”对(它是一本烹饪书,所以版本是食谱版本) 应用程序启动时,它会下载JSON并检查版本。

这是我的方法,但我觉得它很慢。

- (void)isUpdatesAvail
{
   updatesAvail = NO;

   NSInteger iVer = [[NSUserDefaults standardUserDefaults] integerForKey:@"ingredientsVer"];
   NSInteger rVer = [[NSUserDefaults standardUserDefaults] integerForKey:@"recipesVer"];
   NSInteger iCnt = [[NSUserDefaults standardUserDefaults] integerForKey:@"ingredientsCount"];
   NSInteger rCnt = [[NSUserDefaults standardUserDefaults] integerForKey:@"recipesCount"];

   NSString *countPath = [downloadPath stringByAppendingString:@"/versioninfo"];
   NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:countPath]];
   NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
   NSError *error = nil;
   if (!responseData) {
       return;
   }
   NSDictionary *recipesCount = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
   if (!recipesCount) {
      return;
   }

   rCount = [recipesCount objectForKey:@"recipeCount"];
   iCount = [recipesCount objectForKey:@"ingredientCount"];
   rVersion = [recipesCount objectForKey:@"recipeVersion"];
   iVersion = [recipesCount objectForKey:@"ingredientVersion"];

   if ([iVersion integerValue] > iVer || [rVersion integerValue] > rVer || [iCount integerValue] > iCnt || [rCount integerValue] > rCnt) {
       updatesAvail = YES;
   }
}

有人可以给我建议(或可能是例子)如何做到这一点?

1 个答案:

答案 0 :(得分:0)

它'缓慢',因为它执行同步URL请求。它可能只是等待网络传输在大部分时间内完成,如果它显然很慢。

除了缓存数据或减少数据大小之外,没有太多办法可以让它更快。

无论如何,您应该只执行异步请求,然后在完成后进行工作/更新。