SO や他の場所でこれに関連するいくつかの質問を見つけましたが、決定的な答えはありません。私が知る限り、ARCを使用して、それを含むView Controllerが解放されたときに、MKMapViewが解放されていません(または少なくともヒープにガベージが残っています)。
これは私の側ではばかげた問題だとは思いません- 私は自分のコードに注ぎ込み、一度に小さなビットをテストし、数え切れないほどのヒープショットを取り、mapView のデリゲートが nil に設定されていることを確認するなどに多くの時間を費やしました。そして最後に、この単純な行:
self.mapView = [[MKMapView alloc] initWithFrame:CGRectMake(20, 3, 154, 171)];
mapView が配置されているビュー コントローラーに出入りするたびに、最大 200 KB 増加するメモリを割り当てています。
だから、私の質問はこれです: 誰かがここで何が起こっているのか説明できますか? ARC が MKMapView によって占有されたメモリを解放しない理由はありますか? これは既知の問題ですか? 私には非常に保持サイクルのように見え、かなりの量のメモリが失われていますが、これは舞台裏で何かが起こっているに違いないと私には思えます...
編集
my のプロパティ宣言は次のmapView
とおりです。
@property (nonatomic, retain) MKMapView *mapView;
元の質問の行に見られるように、私がこれで行っている唯一のことMKMapView
は alloc と init であることに注意してください (もちろん、このマップビューでもっとやりたいのですが、私はそれをに絞り込みましたこの行は、リークを引き起こしている唯一の部分です -mapView
ビューに挿入されることさえありません)。その一行をコメントアウトすると、リークが消えます。