需要优化来计算和加载uitableview

时间:2013-07-01 10:29:39

标签: ios uitableview core-data nsdate

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

的函数
-(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;

}

2 个答案:

答案 0 :(得分:0)

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

ViewWillAppear不应该进行太多计算,恕我直言。

答案 1 :(得分:0)

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

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

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

但是,尽管如此,你还是不应该把日期搞得一团糟。您应该能够将components:fromDate:toDate:options:与已通过的日期和当前日期一起使用,它将为您完成所有操作,而不会产生任何低效率。

每当eventDate发生变化(大概比您显示观看次数少)时,您也可以预先计算返回值,这会缩短时间。

如果你拿走一件东西,虽然它应该是剖析......