ARC禁止结构或联合中的Objective-C对象,尽管标记了file -fno-objc-arc?为何会这样呢?
我假设如果你把它标记为-fno-objc-arc.你就不会有这个限制。
发布于 2011-12-02 22:13:05
如果您收到此消息,请尝试__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;
发布于 2011-11-11 19:15:12
这是因为arc不能跟踪结构或联合中的对象(因为它们在这一点上是纯C指针)。
即使您用-fno-objc-arc
标记了有问题的文件/类,您仍然可能将一个由弧控制的对象作为参数传递给它,这很可能导致内存泄漏。
发布于 2018-10-10 12:18:18
看起来现在可以正常工作了,可能是在this change之后。
也就是说,你可以把普通的(强)指针放在一个C结构中去指向Objective-C对象。它由ARC管理,例如,当结构被析构时,它不会被保留。通过以下方式验证:
$ clang --version Apple LLVM version 10.0.0 (clang-1000.11.45.2)
https://stackoverflow.com/questions/8093099
复制相似问题