2011-01-26 1 views
0

マップビューのピンのコールアウトで右のコールアウトアクセサリをタップすると、その中にビュー付きのpopovercontrollerが表示されます。私はこれのためにmapcontrollerの2つの保持されたプロパティを維持しています。私はmapcontrollerのdeallocにもこれらのプロパティを公開しています。おそらく決して起こらないでしょう。ポップオーバーコントローラとそのコンテンツビューのメモリの管理

ユーザーが注釈ビューの選択を解除すると、このメモリがすべて解放されますが、nilで十分ですか?

- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view 
{ 
    [self.informationViewController.view removeFromSuperview]; //remove from popovercontroller 
    self.informationViewController = nil; 
    popoverController = nil; 
} 

答えて

0

はい、そうです。これは、オブジェクトの参照をnilに設定し、オブジェクトを解放します。私はメモリ管理についての専門家ではないので、誰かが私にdownvote/correctを望むなら、自由に感じてください。

0

私はあなたもオブジェクトをリリースする必要がありますと信じています。

nilを割り当てるだけでは、メモリ内のオブジェクトへのポインタが削除されませんか?私はオブジェクトがまだメモリに常駐していると思うし、依然として保持カウンタが割り当てられているので、保持カウントが減少するまでメモリからは削除されません。

また、オブジェクトを解放する前にポインタをnilに割り当てることで、コントローラのdeallocでreleaseを呼び出そうとしたときに実際にオブジェクトが解放されないため、メモリリークが発生している可能性があります。

私はこれについて100%確信していませんが、ここにはMemory Management Programming Guideへのリンクもあります。

将来的には、リークパフォーマンスツールを使用してアプリケーションを実行することができます。メモリがリークしている場所と現在メモリに割り当てられているオブジェクトなどが表示されます。

テストプロジェクトで実際にシナリオをセットアップしてリークを使用して監視し、後で自分の回答を更新することもできます。

+0

プロパティが 'retain'と宣言され、デフォルトの合成アクセサーを使用する場合、そのアクセサー(「。」構文)を介してその値を' nil'に設定すると、それを解放します。 –

+0

ああ、okです。知っておいてよかった。 "popovercontroller = nil"部分はどうでしょうか?それはアクセサメソッドを使用していない - それは問題を引き起こすでしょうか? –