我遇到了一个奇怪的问题 这是我的场景,我有一个名为
的函数-(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;
}
答案 0 :(得分:0)
即使多次调用,NumberOfDays(int值)也不会经常更改。 您可以通过NSTimer安排重新计算这些天数,并定义适合您案例的时间间隔。
ViewWillAppear不应该进行太多计算,恕我直言。
答案 1 :(得分:0)
好的,首先,您应该使用工具来分析应用程序,并确切地查看所有时间花在哪里。
对于getNumberOfDaysFromToday
,每次调用日期格式化程序都非常昂贵。您应该创建一次,存储它并每次重复使用相同的。
在日期和字符串之间来回切换也非常耗时且浪费。您已经在使用日期组件,因此您应该扩展该方法并使用日期组件来提取您需要的日期位。
但是,尽管如此,你还是不应该把日期搞得一团糟。您应该能够将components:fromDate:toDate:options:
与已通过的日期和当前日期一起使用,它将为您完成所有操作,而不会产生任何低效率。
每当eventDate
发生变化(大概比您显示观看次数少)时,您也可以预先计算返回值,这会缩短时间。
如果你拿走一件东西,虽然它应该是剖析......