5

インストゥルメントを使用して、適切にリリースされていない割り当てを見つけています。インスタンス化された後にインスタンスメソッドを介してマップを追加するMKMapViewDelegateがあります。ViewDelegateが解放された後、このメソッドが約300KBのメモリを保持し続けることが呼び出しツリーでわかります。私はコードの要点をコメントアウトしましたが、それでもこの行だけでメモリを維持しています。

self.map = [[MKMapView alloc] initWithFrame:CGRectMake(10, 210, 300, 125)];

オブジェクトリストを見ると、MKMapView自体は機能していませんが、新しいViewDelegatesを作成し続けると、そのメモリが増え続けます。マップの定義方法は次のとおりです。

@property (strong, nonatomic)        MKMapView *map;

マップのデリゲートはnilに設定され、ViewDelegateのdeallocの参照も設定されています

self.map.delegate = nil;
self.map = nil;
4

1 に答える 1

1

デリゲートをnilに設定すると、ポインターはなくなり、iOSは必要なときにそれを解放します。iOSは、メモリをnilに設定した直後にメモリを解放しない場合があります。

ポインタをnilに設定して削除していることを忘れないでください。ただし、他の何かがそこに割り当てられるまで、オブジェクトはヒープ上に残り、基本的に何もしません。

(を使用して、スーパービューからMKMapViewも削除したと想定しています[self.map removeFromSuperView])。

于 2012-10-09T01:08:40.723 に答える