【发布时间】: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