我正在学习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中的accelerometer.deleate = self。
但是我没有关于加速度计的实例变量,所以
当viewDidLoad结束时,该方法是如何调用的?
我真的不明白怎样才能保持UIAccelerometer对象。
请帮帮我。
发布于 2011-08-16 12:49:02
[UIAccelerometer sharedAccelerometer]将始终返回相同的加速计对象( singleton),因此您可以在任何地方使用它。
发布于 2011-08-16 12:53:44
只需在您的头文件中创建一个UIAccelerometer属性
@property(nonatomic,retain) UIAccelerometer accelerometer;然后你可以像这样在你的viewDidLoad中分配它:
*accelerometer = [UIAccelerometer sharedAccelerometer];现在,您可以通过self.accelerometer访问加速度计
这里有特殊情况:
是的,一旦viewDidLoad完成,您创建的加速度计对象将不再可访问。-尽管您始终可以从[UIAccelerometer sharedAccelerometer]单例提供程序调用它。(它将始终返回相同的对象)
委托在某个对象的生命周期内处理该对象的调用/事件。
因此,您还可以使用此语句-确保符合UIAccelerometerDelegate协议:
[UIAccelerometer sharedAccelerometer].delegate = self
发布于 2011-08-16 13:07:29
设置对象的代理时,将其保留计数加1。因此,即使您有局部变量accelerometer,一旦函数返回,它就会超出作用域,UIAccelerometer对象被设置为委托的类将保留它,直到该类的保留计数为零为止。
如果你想保持对对象的引用,最好的方法是在你的类的顶部创建一个空的类别,并在那里为你的加速器声明一个ivar。
@interface myClassWithUIAccelerator()
{
UIAccelerator *accelerator;
}
@end..。
- (void)viewDidLoad {
accelerometer = [UIAccelerometer sharedAccelerometer];
accelerometer.delegate = self;
accelerometer.updateInterval = kUpdateInterval;
[super viewDidLoad];
}https://stackoverflow.com/questions/7073701
复制相似问题