如果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对象的情况下保持加速度? (如果改为声明一个指针,然后复制该指针(引用),则在离开加速计事件处理程序时,该指针可能指向非法的内存空间)。

最佳答案

即使UIAcceleration只有四个数据成员(x,y,z和一个时间戳),它也不是struct,因此它不能让您静态引用它(即,您需要使用一个指针)。这与CGPoint(它是C struct)相反,因此您可以通过指针使用它,也可以不使用指针。

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

08-06 04:55