8

次のコードは手動のメモリ管理で正常にコンパイルされますが、ARCでは失敗します。

CALayer *layer = [CALayer layer];
layer.contents = [[UIImage imageNamed:@"dial.png"] CGImage];

エラーは次のとおりです。

自動参照カウントの問題:非Objective-Cポインタ型「CGImageRef」(別名「structCGImage *」)から「id」への暗黙の変換は、ARCでは許可されていません

どうすればこれをARCで実行できますか?

4

2 に答える 2

18

CoreFoundationオブジェクトはARCによって管理されていません。ARCはObjective-Cオブジェクトでのみ機能し、非オブジェクトポインタ型から(またはに)キャストするときに所有権を譲渡する方法を暗黙的に知りません。

キャスト中にオブジェクトの所有権がどのように譲渡されるかをARCに伝える必要があります。

layer.contents = (__bridge id) [[UIImage imageNamed:@"dial.png"] CGImage];
于 2011-12-20T15:48:42.887 に答える
1

-CGImage暗黙の変換について不平を言っているので、結果をidにキャストするだけです...

layer.contents = (id) [[UIImage imageNamed:@"dial.png"] CGImage];
于 2011-12-20T15:37:36.740 に答える