首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ARC禁止结构或联合中的Objective-C对象,尽管标记了file -fno-objc-arc.

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

Stack Overflow用户
提问于 2011-11-11 19:09:05
回答 3查看 53.1K关注 0票数 85

ARC禁止结构或联合中的Objective-C对象,尽管标记了file -fno-objc-arc?为何会这样呢?

我假设如果你把它标记为-fno-objc-arc.你就不会有这个限制。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-02 22:13:05

如果您收到此消息,请尝试__unsafe_unretained。只有当结构中的对象未保留时,它才是安全的。例如:如果你使用带ARC的OpenFeint,类OFBragDelegateStrings会在一个结构中显示这个错误。

代码语言:javascript
复制
typedef struct OFBragDelegateStrings
{
     NSString* prepopulatedText;
     NSString* originalMessage;
} OFBragDelegateStrings;

代码语言:javascript
复制
typedef struct OFBragDelegateStrings
{
     __unsafe_unretained NSString* prepopulatedText;
     __unsafe_unretained NSString* originalMessage;
} OFBragDelegateStrings;
票数 170
EN

Stack Overflow用户

发布于 2011-11-11 19:15:12

这是因为arc不能跟踪结构或联合中的对象(因为它们在这一点上是纯C指针)。

即使您用-fno-objc-arc标记了有问题的文件/类,您仍然可能将一个由弧控制的对象作为参数传递给它,这很可能导致内存泄漏。

票数 13
EN

Stack Overflow用户

发布于 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)

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8093099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档