5

CGImageRef をオブジェクト ポインターにキャストするのにメモリ管理情報 (__bridge など) が必要ないのはなぜですか? たとえば、imageが UIImage * 型で、layerが UIView の基礎となる層である場合、次のコード行はコンパイラから何の苦情も引き出しません。

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

1 に答える 1

6

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キャストは必要ありません。

于 2012-05-01T21:18:04.743 に答える