2012-05-01 13 views
5

はなぜオブジェクトポインタにCGImageRefをキャストするには、(__bridgeなど)は、メモリ管理情報を必要としないのでしょうか? 画像はタイプUIImage *のものであり、はUIViewのの下の層である場合たとえば、その後、次のコード行は、コンパイラからの苦情を誘発しない:なぜこのキャストはARCでブリッジングを必要としませんか?

layer.content = (id)[image CGImage]; 

答えて

6

Transitioning to ARC Release Notes引用する:

コンパイラは、CFは、コンパイラがCore Foundationのを返すObjective-Cのメソッドを理解ココア方法

から返されたオブジェクトのハンドルタイプは、歴史的なココア命名規則(see Advanced Memory Management Programming Guide)に従います。例えば、コンパイラは、iOSで、CGColorは 所有されていないUIColorのCGColorメソッドによって返される、 知っています。 は、この例で示すように、あなたはまだ(OK、ではない非常にココアタッチ、ちょっと!)...、

を適切な型キャストを使用する必要があります。

CGImageがCoreFoundationのオブジェクトを返すので、__bridgeキャストは必要ありません。

+1

大きな会社はかつて自分の携帯「ココアのみ」チームに参加するために私に尋ねた...それは誰もが本当に 'cocoa'と'ココアtouch'の違いを気にしないように思えるし、ちょうどすべてココア(偶数にObjC)を呼び出し、これは明らかにアップルでも起こるが、それは残念だ。 – JustSid

+0

したがって、正しく理解すれば、ARCはCocoaメソッドによって返されたもの以外のCFオブジェクトを処理しません。 ARCは、CFオブジェクトを制御しませんが、ココアの方法の一部は、カカオ命名プロトコル以下CFオブジェクトについてでした: – Inept

+1

@JustSid *私は気を* =) – justin

関連する問題