在ARC中不允许对Objective-C指针进行隐式转换

Implicit conversion of an Objective-C pointer is disallowed with ARC

本文关键字:转换 指针 Objective-C ARC 不允许      更新时间:2023-10-16

我正在玩这个花栗鼠教程,我遇到了以下代码的问题(在第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对象的data属性与UIImageView对象ball链接起来。如果我关闭ARC处理,这工作得很好,但使用ARC我不能这样做,得到错误:

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

因为ballShape是一个指针,和原始对象有一个数据属性,有没有任何方法我可以分配球对象的属性,使ARC高兴?我正在尝试以下代码:

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

这使错误消失,但这是解决这个问题的正确方法吗?我看过苹果的ARC文档,但其中很多内容目前我还不太明白。如果这是一个非常基本的问题,那么提前道歉,但是C中的"->"操作符让我感到困惑和愤怒。:)

如果你只是想存储指针,它是正确的,只要你保持你的ball的引用