我在学习ios编程。但我有一个问题是UIAccelerometer。
首先是代码。
- (void)viewDidLoad {
UIAccelerometer *accelerometer = [UIAccelerometer sharedAccelerometer];
accelerometer.delegate = self;
accelerometer.updateInterval = kUpdateInterval;
[super viewDidLoad];
}
- (void)accelerometer:(UIAccelerometer *)accelerometer
didAccelerate:(UIAcceleration *)acceleration {
[(BallView *)self.view setAcceleration:acceleration];
[(BallView *)self.view draw];
}
第一个问题是viewDidLoad,我使用的方法是sharedAccelerometer
并返回系统的共享对象。
当viewDidLoad结束时,不是局部变量,加速度计,消失了吗?
我认为当我得到一个加速度计对象时,它就消失了。
因为viewDidLoad结束了,我没有关于它的实例变量。
那只是本地变量。
第二个是委托方法。
我说,在viewDidLoad中加速度计.deleate = self。
但是我没有关于加速度计的实例变量,所以
当viewDidLoad结束时,如何调用该方法?
我真的不明白如何保留UIAccelerometer对象。
请帮帮我。
答案 0 :(得分:4)
[UIAccelerometer sharedAccelerometer]
将始终返回相同的加速度计对象(singleton),因此您可以在任何地方使用它。
答案 1 :(得分:0)
只需在头文件中创建一个UIAccelerometer
属性
@property(nonatomic,retain) UIAccelerometer accelerometer;
然后,您可以在viewDidLoad
中将其指定为:
*accelerometer = [UIAccelerometer sharedAccelerometer];
现在您可以通过self.accelerometer
特例:
是的,完成viewDidLoad
后,您创建的加速度计对象将无法再访问。 - 你总是可以从[UIAccelerometer sharedAccelerometer]
单身人士提供者那里叫它。 (它将始终返回相同的对象)
委托在其生命周期内处理某个对象的调用/事件。
因此您也可以使用此语句 - 确保您符合UIAccelerometerDelegate
协议:
[UIAccelerometer sharedAccelerometer].delegate = self
答案 2 :(得分:0)
设置对象的委托时,将其保留计数增加1。因此,即使你有局部变量accelerometer
,一旦函数返回超出范围,UIAccelerometer
对象被设置为委托的类将保留它,直到该类达到保留计数零。
如果你想保留对象的引用,真正做到这一点的最好方法是在你的类的顶部创建一个空类别,并在那里为你的加速器声明一个ivar。
@interface myClassWithUIAccelerator()
{
UIAccelerator *accelerator;
}
@end
...
- (void)viewDidLoad {
accelerometer = [UIAccelerometer sharedAccelerometer];
accelerometer.delegate = self;
accelerometer.updateInterval = kUpdateInterval;
[super viewDidLoad];
}