为什么在iOS中,我们不能声明“UIAcceleration accelerationCurrent”; ViewController类中的实例变量?

时间:2012-04-27 02:23:46

标签: iphone ios accelerometer

如果Accelerometer的事件处理程序在以下内容中使用UIAcceleration *

-(void) accelerometer:(UIAccelerometer *)accelerometer 
            didAccelerate:(UIAcceleration *)acceleration {

然后如果ViewController有一个实例变量:

UIAcceleration accelerationCurrent;

然后为了记住加速度作为当前状态,我使用了

accelerationCurrent = *acceleration;

在Accelerometer事件处理程序中。但是.h文件中的实例变量声明给出了错误,因为“接口类型无法静态分配”。

我认为UIAcceleration只有3个双打:x,y,z,所以如果我们可以在那里使用CGPoint aPoint,我们怎么能不能使用UIAcceleration accelerationCurrent,我们怎样才能保持加速而不单独复制x,y,z但使用一个UIAcceleration对象? (如果我们声明一个指针,并复制指针(引用),那么在离开加速度计事件处理程序时,指针可能指向一个非法的内存空间)。

1 个答案:

答案 0 :(得分:3)

即使UIAcceleration只有四个数据成员(x,y,z和时间戳),它也不是struct,因此它不允许你静态引用它(即你需要使用指针)。这与CGPoint形成对比,后者是C struct,因此您可以通过指针或不使用指针来使用它。

不幸的是,没有办法复制你感兴趣的值:你绝对是正确的,一旦线程离开你的处理程序,UIAcceleration对象可能会在你背后重用。 UIAcceleration也不符合复制协议,因此您需要自己编写该复制例程。