objective-c - ARCcast - 破解 objc 对象内存

标签 objective-c automatic-ref-counting

这段代码在非 ARC 下可以正常编译:

int *privateObjMemory = (int *)[myObject performSelector:@selector(privateMethod)];

现在我在 ARC 中,我得到:

Cast of an Objective-C pointer to 'int *' is disallowed with ARC

我该如何解决这个问题? :)

最佳答案

写成:

int* privateObjMemory = [myObject privateMethod];

;)

您想要避免这种情况的原因是它对于 ARC 来说是不明确的。 performSelector: 返回一个对象——是否应该保留 int* ?嗯...不。

更新

基于评论,并删除以前的文字:

但这不是一个很好的解决方案。如果您正在调用特定的私有(private) API,那么您必须知道其签名(例如参数和返回类型)。如果它是您的私有(private)API,那么找出一种方法使该私有(private)接口(interface)有选择地可见。

如果是别人的私有(private)API,则在该类型上声明一个类别,该类别具有正确的参数和返回类型。

然后正确声明选择器,编译器将能够通过直接向对象发送消息来正确设置调用 - 无需使用 performSelector:

关于objective-c - ARCcast - 破解 objc 对象内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13470621/

相关文章:

iphone - UITableViewController 数据源的自定义类

objective-c - 将 'FLT_EPSILON' 用于 64 位 iPhone 5S

ios - 调度仪不支持iPhone5

objective-c - 为什么赋值给强属性有效,但给弱属性赋值却不行?

ios - CollectionViewCell 问题。从 .xib 到自定义 collectionviewcell 的 Storyboard转换

ios - 语义问题-分配给只读属性

swift - 初始 View Controller 应该调用 "deinit"吗?

iphone - ARC方法中的autoreleasepool

ios - ARC、自身和 block

objective-c - NSManagedObjectContext 异步或同步保存更改?