CGImageRef をオブジェクト ポインターにキャストするのにメモリ管理情報 (__bridge など) が必要ないのはなぜですか? たとえば、imageが UIImage * 型で、layerが UIView の基礎となる層である場合、次のコード行はコンパイラから何の苦情も引き出しません。
layer.content = (id)[image CGImage];
CGImageRef をオブジェクト ポインターにキャストするのにメモリ管理情報 (__bridge など) が必要ないのはなぜですか? たとえば、imageが UIImage * 型で、layerが UIView の基礎となる層である場合、次のコード行はコンパイラから何の苦情も引き出しません。
layer.content = (id)[image CGImage];
Transitioning to ARC Release Notesを引用するには:
コンパイラは、Cocoa メソッドから返された CF オブジェクトを処理します
コンパイラは、Core Foundation 型を返す Objective-C メソッドを理解し、歴史的な Cocoa 命名規則に従います ( Advanced Memory Management Programming Guide を参照)。たとえば、コンパイラは、iOS では、UIColor の CGColor メソッドによって返される CGColor が所有されていないことを認識しています。この例で示されているように、適切な型キャストを使用する必要があります...
(OK、ココアタッチではありませんが、ちょっと!).
CGImage は CoreFoundation オブジェクトを返すため、__bridge
キャストは必要ありません。