0

CLLocation にいくつかのメモリの問題があります。

CLLocation *annotation = [[CLLocation alloc] initWithLatitude:[[tempDict objectForKey:@"lat"] doubleValue] longitude:[[tempDict objectForKey:@"lon"]doubleValue]];
CLLocation *item2 = [[CLLocation alloc] initWithLatitude:[newLatString doubleValue] longitude:[newLongString doubleValue]];
cell.detailTextLabel.text = [NSString stringWithFormat:@"%.1f km",[item2 distanceFromLocation:annotation]/1000];
[annotation release];
[item2 release];

だから私はこれをやろうとしましたが、注釈の座標を設定できないことに気付きました。

CLLocationCoordinate2D tempCoordinate = annotation.coordinate;
tempCoordinate.latitude = [[tempDict objectForKey:@"lat"] doubleValue];
tempCoordinate.longitude = [[tempDict objectForKey:@"lon"] doubleValue];
    annotation.coordinate = tempCoordinate;

これの回避策はありますか?cellForRowAtIndexPath が呼び出されるたびに CLLocation を割り当て/初期化したくありません..

4

2 に答える 2

0

結果のオブジェクトはNSStringです。NSStringと、必要に応じて中間データの参照/ivarsを含むクラスを作成するだけです。次に、オブザーバーイディオムを使用して、文字列が変更されたときにセルを更新するだけです(文字列が座標に依存するように設計します)。おそらく、初期化時に一連の引数(座標など)を取り、初期化中にNSStringを作成し、データが変更されない場合は結果を参照するクラスを作成できます。実際には、どのデータがどの頻度で変化するかによって異なります。

于 2010-09-28T04:16:14.167 に答える
0

cellForRowAtIndexPath が呼び出されるたびに CLLocation を割り当て/初期化したくありません..

なぜだめですか?それがパフォーマンスの問題を引き起こしていることを知っていますか? それらをすぐに解放しているので、余分なメモリを占有していません。CLLocation はかなり軽量なクラスのように見え、Objective-C ランタイムは大幅に最適化されているため、おそらくかなり迅速に割り当て/初期化されます。スクロール/パフォーマンス/メモリの問題が発生するまでは、機能し、保守が容易なものを使用します。

時期尚早の最適化は諸悪の根源 - Donald Knuth

于 2010-09-28T03:55:44.603 に答える