尽管标记了文件-fno-objc-arc,但ARC仍禁止在结构或联合中使用Objective-C对象?为什么会这样呢?
我假设如果将其标记为-fno-objc-arc,则没有此限制。
Answers:
如果收到此消息,请尝试__unsafe_unretained。仅当未保留结构中的对象时,这才是安全的。示例:如果将OpenFeint与ARC一起使用,则类OFBragDelegateStrings在结构中会显示此错误。
typedef struct OFBragDelegateStrings
{
NSString* prepopulatedText;
NSString* originalMessage;
} OFBragDelegateStrings;
至
typedef struct OFBragDelegateStrings
{
__unsafe_unretained NSString* prepopulatedText;
__unsafe_unretained NSString* originalMessage;
} OFBragDelegateStrings;
NSArray
怎么办?在那种情况下,不会立即释放它,但我想知道编译器会说什么(现在无法测试)...
这是因为arc无法跟踪结构或联合中的对象(因为它们当时位于纯C指针处)。
即使您标记了有问题的文件/类, -fno-objc-arc
您仍可能会将受arc控制的对象作为参数传递给它,这很可能会导致内存泄漏。
-fno-objc-arc
在项目中混合ARC文件和非ARC文件,但是如果您在任何地方都使用普通的C结构(例如struct或union),则根本无法使用ARC。