CALayerのxxxColorプロパティに代入したCGColorがメモリリークしてしまう現象
CALayerクラスのBorderColorやBackgroundColorといったxxxColorプロパティに対してCGColorを代入した時、メモリリークが発生してしまう現象が起きた。
以下の様にした時、
layer = CALayer.Create (); layer.BorderColor = new CGColor(1.0f, 1.0f, 1.0f, 1.0f); layer.Dispose ();
InsturumentsでAllocation状況をモニタしているとCGColorのインスタンスがメモリ上に残り続けているのを見つけた。
layer.BorderColorが残っているのだろうかと、layer.BorderColorを直接Disposeしたりしてみても状況が変わらない。
結局以下の様にすることで回避できた。
layer = CALayer.Create (); using (CGColor color = new CGColor (1.0f, 1.0f, 1.0f, 1.0f)) { layer.BorderColor = color; } layer.Dispose ();
どうやら代入しようとしてnewしたCGColorが残っていたようだ。
代入した物をDisposeすると正常に表示されないのでは?と思ったがなんの問題もなく動いている。内部でコピーしているのだろうか。原因は不明。
MonoTouch v5〜v5.1.2 previewでこの現象を確認している。