UPDATE:この問題はXcode 4.6で修正されました!CFタイプの__attribute __((NSObject))を持つ強い@propertyは保持されません
このテクニックは、再び意図どおりに機能します。しかし、あなたのコードで使用する前に、Rob Napierの優れた答えの一番上にあるノートを必ず読んでください。
ORIGINAL POST
(ARC、Xcodeの4.3.1、iOSの5.1)
私は自動的に__attribute__((NSObject))
を使用してARCによって管理されるようにしたいというCFタイプ(CGImage)の強い性質を持っています(合成セッターに&のリリースを保持していて、deallocではnilされているように)、動作しません。プロパティを割り当てると、オブジェクトは保持されません。再現する
最小限例:
二回 '1' を出力します@interface TestClass : NSObject
@property (nonatomic, strong) __attribute__((NSObject)) CFStringRef str;
@end
// ...In some function
CFStringRef str = (__bridge CFStringRef)[NSString stringWithFormat:@"%g", 2.5];
NSLog(@"%ld", CFGetRetainCount(str));
TestClass *obj = [[TestClass alloc] init];
obj.str = str;
NSLog(@"%ld", CFGetRetainCount(str));
。
今、奇妙なことが(私はこれのか分からないが)、私はiOSの5.1(iOSの5 & Xcodeの4.2から)&のXcode 4.3.1にアップデート、およびそれに切り替わる前に、それが正常に働いていたと思うということですgdbからlldbへアップグレードしていない(またはコンパイラの変更方法を知っている)人がおそらく確認できるのでしょうか?この技術に興味のある人のための
解決策の1つは、単純にNSString *プロパティを使用し、割り当て時に__bridgeキャストを使用することです。 – jtbandes
私は[このリンク](http://clang.llvm.org/docs/AutomaticReferenceCounting.html#objects.operands.casts)から何かを得ることはできません –
残念ながらこれは再現するための単なる例ですが、私の実際のコードで私はCGImageを使用しています。私は投稿を編集します。 –