【发布时间】:2011-02-19 07:55:10
【问题描述】:
我有一些方法可以返回两个给定日期之间的工作日数。由于当两个日期相隔数年时调用这些方法变得非常昂贵,我想知道如何以更有效的方式重构这些方法。 返回的结果是正确的,但我觉得 iphone 处理器正在努力跟上,因此当我在 10 年内调用这些方法时冻结了应用程序。 有什么建议吗?
//daysList contains all weekdays that need to be found between the two dates
-(NSInteger) numberOfWeekdaysFromDaysList:(NSMutableArray*) daysList
startingFromDate:(NSDate*)startDate
toDate:(NSDate*)endDate
{
NSInteger retNumdays = 0;
for (Day *dayObject in [daysList objectEnumerator])
{
if ([dayObject isChecked])
{
retNumdays += [self numberOfWeekday:[dayObject weekdayNr] startingFromDate:startDate toDate:endDate];
}
}
return retNumdays;
}
-(NSInteger) numberOfWeekday:(NSInteger)day
startingFromDate:(NSDate*)startDate
toDate:(NSDate*)endDate
{
NSInteger numWeekdays = 0;
NSDate *nextDate = startDate;
NSComparisonResult result = [endDate compare:nextDate];
//Do while nextDate is in the past
while (result == NSOrderedDescending || result == NSOrderedSame)
{
if ([NSDate weekdayFromDate:nextDate] == day)
{
numWeekdays++;
}
nextDate = [nextDate dateByAddingDays:1];
result = [endDate compare:nextDate];
}
return numWeekdays;
}
【问题讨论】:
标签: iphone objective-c cocoa cocoa-touch