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 を使用します。しかし、他のView Controllerに移動して戻ってくると、このメソッドが常に呼び出され、ナビゲーション速度が妨げられます.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 に答える