0

我遇到了一个奇怪的问题这是我的场景,我有一个名为

-(void)fetch
{ 
   for (Dog *aDog in allDogs)
   {
       if([aDog getNumberOfDaysFromToday]>=0)
      {
        [filteredArray addObject:aDog];
      }
      else 
      {
        [tempArr addObject:aDog];
      }

   }
   [filteredArray addObjectsFromArray:tempArr];
}

上述方法计算 numberOfDaysFromToday 并返回一个整数值。

我总是需要计算 numberOfDaysFromToday 以便数据始终是最新的。

我有一个 UITableView 显示当前数据。

现在的问题:

因为我需要经常调用 fetch 方法,所以我使用 viewWillAppear。但是当我导航到其他视图控制器并返回时,总是调用此方法,因此我的导航速度受到阻碍。由于 fetch 方法,导航返回大约需要 4-5 秒。我想知道的是,有什么办法可以加快 getNumberOfDaysFromToday 函数的速度吗?或者有人可以告诉我其他的解决方法吗?

getNumberOfDaysToday:

-(int)getNumberOfDaysFromToday{
    // Take the month and day of month of the event date
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
    [dateFormatter setDateFormat:@"dd.MM"];
    NSString *eventDateString = [dateFormatter stringFromDate:self.eventDate];
    NSDate *newEventDate = [dateFormatter dateFromString:eventDateString];
    NSString *currentDateString = [dateFormatter stringFromDate:[NSDate date]];
    NSDate *newCurrentDate = [dateFormatter dateFromString:currentDateString];
    NSDateComponents *components;
    NSInteger days;

    components = [[NSCalendar currentCalendar] components: NSDayCalendarUnit
                                                 fromDate: newCurrentDate   toDate: newEventDate options: 0];
    days = [components day];

    return days;

}
4

2 回答 2

0

NumberOfDays(int 值)即使您多次调用它也不会经常更改。您可以通过NSTimer安排重新计算这些天,并定义适合您情况的间隔。

ViewWillAppear 不应该做这么多的计算,恕我直言。

于 2013-07-01T10:45:42.867 回答
0

好的,首先,您应该使用工具来分析应用程序并准确查看所有时间都花在了哪里。

对于您来说getNumberOfDaysFromToday,每次调用时创建一个日期格式化程序是非常昂贵的。您应该创建一次,存储它并每次重复使用同一个。

在日期和字符串之间来回切换也非常耗时且浪费。您已经在使用日期组件,因此您应该扩展该方法并使用日期组件来提取您需要的日期位。

但是,说了这么多,无论如何你都不应该乱搞日期。您应该能够使用components:fromDate:toDate:options:已通过的日期和当前日期,它会为您完成所有工作,而不会出现所有低效问题。

您还可以在更改时预先计算返回值eventDate(这可能比您显示视图的频率要低),这将进一步减少时间。

如果你从中拿走一件事,虽然它应该是分析......

于 2013-07-01T10:47:15.640 回答