首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何保留UIAccelerometer对象?

如何保留UIAccelerometer对象?
EN

Stack Overflow用户
提问于 2011-08-16 12:47:30
回答 3查看 125关注 0票数 0

我正在学习ios编程。但是我有一个问题,就是UIAccelerometer。

下面是代码。

代码语言:javascript
复制
- (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对象。

请帮帮我。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-16 12:49:02

[UIAccelerometer sharedAccelerometer]将始终返回相同的加速计对象( singleton),因此您可以在任何地方使用它。

票数 4
EN

Stack Overflow用户

发布于 2011-08-16 12:53:44

只需在您的头文件中创建一个UIAccelerometer属性

代码语言:javascript
复制
@property(nonatomic,retain) UIAccelerometer accelerometer;

然后你可以像这样在你的viewDidLoad中分配它:

代码语言:javascript
复制
*accelerometer = [UIAccelerometer sharedAccelerometer];

现在,您可以通过self.accelerometer访问加速度计

这里有特殊情况:

是的,一旦viewDidLoad完成,您创建的加速度计对象将不再可访问。-尽管您始终可以从[UIAccelerometer sharedAccelerometer]单例提供程序调用它。(它将始终返回相同的对象)

委托在某个对象的生命周期内处理该对象的调用/事件。

因此,您还可以使用此语句-确保符合UIAccelerometerDelegate协议:

[UIAccelerometer sharedAccelerometer].delegate = self

票数 0
EN

Stack Overflow用户

发布于 2011-08-16 13:07:29

设置对象的代理时,将其保留计数加1。因此,即使您有局部变量accelerometer,一旦函数返回,它就会超出作用域,UIAccelerometer对象被设置为委托的类将保留它,直到该类的保留计数为零为止。

如果你想保持对对象的引用,最好的方法是在你的类的顶部创建一个空的类别,并在那里为你的加速器声明一个ivar。

代码语言:javascript
复制
@interface myClassWithUIAccelerator()
{
    UIAccelerator *accelerator;
}
@end

..。

代码语言:javascript
复制
- (void)viewDidLoad {
    accelerometer = [UIAccelerometer sharedAccelerometer];
    accelerometer.delegate = self;
    accelerometer.updateInterval =  kUpdateInterval;
    [super viewDidLoad];
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7073701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档