更新:此問題已修復Xcode 4.6!強烈@property與__attribute __((NSObject))爲CF類型不保留
此技術現在可以按照預期工作。但是,在您使用代碼之前,請務必閱讀Rob Napier最佳答案頂部的註釋。
ORIGINAL POST
(ARC時,Xcode 4.3.1的iOS 5.1)
我有CF型(CGImage),我要通過使用__attribute__((NSObject))
ARC自動管理的強大的屬性(例如在合成的setter中保留&版本,並且它在dealloc中被刪除),但它不起作用:當我分配屬性時,該對象不會保留。
的最小例子重現:
@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));
哪個打印 '1' 的兩倍。我覺得它工作正常之前我更新到iOS 5.1 & Xcode 4.3.1(從iOS 5 & Xcode 4.2),並從它切換到gdb到lldb。沒有升級(或知道如何改回編譯器)的人可以確認嗎?
解決方法之一就是使用'NSString *'屬性,並在分配時使用'__bridge'屬性。 – jtbandes 2012-03-13 13:59:48
我沒有從[此鏈接](http://clang.llvm.org/docs/AutomaticReferenceCounting.html#objects.operands.casts)得到任何東西,希望你得到一些東西 – 2012-03-13 14:42:42
不幸的是,這只是一個重現的例子,在我使用的實際代碼中,我有一個CGImage。我將編輯帖子。 – 2012-03-13 18:50:31