1

mapView 上の GPS インジケータの位置を更新するには...

[mapView removeAnnotation:myGpsAnnotation];
[myGpsAnnotation release];
myGpsAnnotation = nil;
myGpsAnnotation = [[MapLocationAnnotation alloc] initWithCoordinate:region.center annotationType:MapAnnotationTypeGps title:MAP_ANNOTATION_TYPE_GPS];
[mapView addAnnotation:myGpsAnnotation];

...Instruments (シミュレーター) で正味メモリがゆっくりと上昇しているのが見えます。「Leak」ブリップはありませんが、「Net Bytes」と「# Net」はゆっくりと増加しています...このコードがコメントアウトされていない限り。したがって、これが問題のあるコードであることは 100% 確信しています。

しかし、私が次のことをすると...

[mapView removeAnnotation:myGpsAnnotation];
[myGpsAnnotation release];
myGpsAnnotation = nil;
myGpsAnnotation = [[MapLocationAnnotation alloc] initWithCoordinate:region.center annotationType:MapAnnotationTypeGps title:MAP_ANNOTATION_TYPE_GPS];
[mapView addAnnotation:myGpsAnnotation];
[mapView removeAnnotation:myGpsAnnotation];
[mapView addAnnotation:myGpsAnnotation];
[mapView removeAnnotation:myGpsAnnotation];
[mapView addAnnotation:myGpsAnnotation];

...その後、「Net Bytes」と「# Net」ははるかに速く増加します。これは私の間違いではなく、MapKit のリークを追跡しようとしている可能性はありますか? 私は本当にメモリをリークしていますか?繰り返しますが、「リーク」の下には何も表示されませんが、ネット値が継続的に上昇する理由がわかりません。

助けてくれてありがとう -Gord

4

3 に答える 3

1

まず、コレクションの仕組みを理解する必要があります。

コレクションにオブジェクトを追加すると、それが保持されます。
コレクションからオブジェクトを削除すると解放されます。

あなたの場合、それはマップビューです:


  1. アノテーションをマップ ビューに追加した後、参照を所有している場合はリリースする必要があります。
  2. マップ ビューから注釈を削除した後は、解放する必要はありません。

 MyClass *obj=[[MClass alloc] init];
 [mapview addObject:obj];
 [obj release];
 ...
 [mapview removeAnnotation:obj];

それでおしまい。ここでリリースする必要はありません。

于 2011-03-04T07:38:05.460 に答える
0

シミュレータでテストしているときにこれを観察している場合でも、心配する必要はありません。マップキットは、デバイス上でシミュレーターを実行すると、マップタイルをメモリにキャッシュするようです。デバイス上の制限されたRAMではなく、マップタイルの保存にSQLiteを使用します。

于 2010-02-13T17:29:55.737 に答える