如果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
对象? (如果我们声明一个指针,并复制指针(引用),那么在离开加速度计事件处理程序时,指针可能指向一个非法的内存空间)。
答案 0 :(得分:3)
即使UIAcceleration
只有四个数据成员(x,y,z和时间戳),它也不是struct
,因此它不允许你静态引用它(即你需要使用指针)。这与CGPoint
形成对比,后者是C struct
,因此您可以通过指针或不使用指针来使用它。
不幸的是,没有办法复制你感兴趣的值:你绝对是正确的,一旦线程离开你的处理程序,UIAcceleration
对象可能会在你背后重用。 UIAcceleration
也不符合复制协议,因此您需要自己编写该复制例程。