【问题标题】:Implicit conversion of an Objective-C pointer is disallowed with ARCARC 不允许对 Objective-C 指针进行隐式转换
【发布时间】:2011-12-29 02:23:07
【问题描述】:

我正在玩这个Chipmunk Tutorial,但我遇到了以下代码的问题(在第 5 节中):

// Create our shape associated with the ball's body    
cpShape *ballShape = cpCircleShapeNew(ballBody, 20.0, cpvzero);  
ballShape->e = 0.5; // Elasticity  
ballShape->u = 0.8; // Friction  
ballShape->data = ball; // Associate with out ball's UIImageView  

在最后一行ballShape->data = ball;我正在尝试将 ballShape 对象的数据属性与 UIImageView 对象球链接起来。如果我关闭 ARC 处理,这工作正常,但使用 ARC 我不能这样做,得到错误:

"Implicit conversion of an Objective-C pointer to 'cpDataPointer' (aka 'void *') is disallowed with ARC"

既然 ballShape 是一个指针,并且原始对象有一个 data 属性,有什么办法可以将球对象分配给该属性并使 ARC 满意吗?我正在尝试以下代码:

ballShape->data = (__bridge cpDataPointer)ball; // Associate with out ball's UIImageView  

这会使错误消失,但这是解决此问题的正确方法吗?我查看了 Apple 的 ARC 文档,但目前其中很多内容都超出了我的想象。如果这是一个非常基本的问题,请提前抱歉,但是 C 中的“->”运算符让我感到困惑和愤怒。 :)

【问题讨论】:

  • 这个问题的第一个答案很好地解释了桥接stackoverflow.com/questions/6725558/…
  • 另外,如果你理解指针,C++ -> 操作符并不是什么花哨的东西。 ballShape->e 相当于 (*ballShape).e
  • ARC 是 Objective C - 为什么它被标记为 C++(或 C)?

标签: c++ objective-c automatic-ref-counting chipmunk


【解决方案1】:

如果你只是想存储指针,只要你保持对ball的引用就可以了。

【讨论】:

    猜你喜欢
    • 2011-10-15
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    相关资源
    最近更新 更多