たぷつきません

おなかがでてきた。もうたぷついてるやん。

GraphicsServicesの不思議

 CGColor.hのAPIから色のファクトリを作った。次はフォントの方だなと着手しかかったところ、GSFontRef用のretainやreleaseに該当する関数がない。自動化されてるの!?と思いきや「メモリリークを防ぐために、CFReleaseかキャストしてautoReleaseを呼べ」とコメントがあった。そんなんでいいの?
 ということは、[(id)(CGColorRefのインスタンス) retain] や、[(id)(CGColorRefのインスタンス) release]のように呼べばよくて、CGColorRetainやCGColorReleaseである必要はないということにもなるのかな?しかしオブジェクトのRTTIがあるからdeallocメソッドが呼ばれるはずで、(id)キャストだけじゃアクセスバイオレーションになるはずじゃ…(でも実験したかぎり落ちない)。
 init時にCGColorCreateなどをしてフィールドにとっておいたものが、抜けると解放されている。たぶんinit時のみ有効な直近のメモリプールがあると想像できるが、そう考えると勝手にautoRelease扱いになっているとも取れる。
 …と、ここまで書いたが、単にヘッダ上で見せている空のストラクチャは実際の構造を隠蔽しているだけのシンボルだと気づいた。こんなん昔Cで自分もよく使ってたテクじゃんと。たぶん皆objc_object。

追記

 しかし、 CGColorRefは共通なのに、CGFontRefとGSFontRefとに分けているということに疑問が残る。GSFontはCGFontの継承クラスかなにか別のクラスで不一致を示すために別のシンボルにしているということかな。