如果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
也不符合复制协议,因此您需要自己编写该复制例程。