尽管标记了文件-fno-objc-arc,但ARC禁止结构或联合中的Objective-C对象

时间:2011-11-11 11:09:05

标签: iphone objective-c struct ios5 automatic-ref-counting

ARC禁止在结构或联合中使用Objective-C对象,尽管标记了文件-fno-objc-arc? 为什么会这样?

我假设你将它标记为-fno-objc-arc,你没有这个限制。

4 个答案:

答案 0 :(得分:171)

如果您收到此消息,请尝试__unsafe_unretained。如果结构中的对象没有保留,那么它是安全的。 示例:如果对ARC使用OpenFeint,则类OFBragDelegateStrings在结构中显示此错误。

typedef struct OFBragDelegateStrings
{
     NSString* prepopulatedText;
     NSString* originalMessage;
} OFBragDelegateStrings;

typedef struct OFBragDelegateStrings
{
     __unsafe_unretained NSString* prepopulatedText;
     __unsafe_unretained NSString* originalMessage;
} OFBragDelegateStrings;

答案 1 :(得分:30)

而不是结构,您可以创建 Objective-C类来代替管理数据。

答案 2 :(得分:13)

这是因为arc无法跟踪结构或联合中的对象(因为它们在那时是普通的C指针)。

即使您使用-fno-objc-arc标记了相关文件/类,您仍然可以将arc控制的对象作为参数传递给它,这很可能会导致内存泄漏。

答案 3 :(得分:4)

看起来现在这样可以正常工作了,可能在this change之后。

即,您可以在C结构中放置指向Objective-C对象的普通(强)指针。它是由ARC管理的,例如,在销毁结构时不会保留它。验证:

$ clang --version Apple LLVM version 10.0.0 (clang-1000.11.45.2)