2013-07-01 22 views
0

我遇到一個奇怪的問題 這裏是我的方案,我有一個名爲需要進行優化計算和裝載的UITableView

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

    } 
    [filteredArray addObjectsFromArray:tempArr]; 
} 

功能上述方法計算numberOfDaysFromToday並返回一個整數值。

我總是需要計算numberOfDaysFromToday,以便數據始終保持最新。

我有一個UITableView向我顯示當前數據。

現在的問題:

因爲我需要經常我使用viewWillAppear中調用該方法獲取。 但是,當我在裏面導航到其他視圖控制器並返回時,總是會調用此方法,因爲我的導航速度受到阻礙。因爲取方法,導航返回大約需要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

顯示爲'getNumberOfDaysFromToday'方法的代碼。你處理了多少物品? – Wain

+0

@爲了添加代碼,我正在處理大約963個對象 – vin

回答

0

好吧,首先,您應該使用工具來分析應用程序並準確查看所有時間都花在哪裏。

對於你的getNumberOfDaysFromToday,每次調用它時創建一個日期格式化程序是非常昂貴的。您應該創建一次,將其存儲並每次重複使用同一個。

在日期和字符串之間來回切換也非常耗時且浪費。您已經在使用日期組件,因此您應該擴展該方法並使用日期組件來提取所需的日期位。

但是,所有的說法,你不應該需要亂糟糟的日期。您應該只能使用components:fromDate:toDate:options:以及通過的日期和當前日期,它將爲您做所有事情,而不會造成所有的低效率。

只要eventDate發生變化(這可能比您顯示視圖的次數更少),您也可以預先計算返回值,這將減少更多時間。

如果從這個拿一件事遠但應當剖析......

0

NUMBEROFDAYS(int值)不經常變化,即使你調用了很多次。 您可以通過NSTimer安排這些天的重新計算,並定義一個適合您情況的時間間隔。

ViewWillAppear不應該做這麼多的計算,恕我直言。