我怎样才能保留UIAccelerometer对象?

时间:2011-08-16 04:47:30

标签: iphone scope singleton

我在学习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对象。

请帮帮我。

3 个答案:

答案 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];
}