NSRunLoop在模拟器上运行正常,崩溃了iDevice

时间:2012-03-27 01:46:34

标签: objective-c ios nstimer nsrunloop

我正在开发一款iOS应用程序(FW:5.0+& ARC),需要逐秒更新。

目前,我在一个方法中有这个(在-ViewDidLoad时在performSelector中调用):

-(void)FireOnload {
counter = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(countDownTime) userInfo:nil repeats:YES];
[counter fire];
[[NSRunLoop mainRunLoop] addTimer:counter forMode: NSDefaultRunLoopMode]; // <-- Causing Problem
}

-(void)countDownTime
{
double timeNow = [[NSDate date] timeIntervalSince1970];
double timeLeft = timeEnding - timeNow;

if(timeLeft < 60) // Less then 60 seconds, do something.
{
   //Do Stuff
}

}

counter变量在标题中作为NSTimer调用。 我明确地调用[counter fire],因此只要加载视图就会调用它,而不是在1秒后调用。

在iOS模拟器中运行正常,每秒都会触发,但是当它进入iDevice时,它会崩溃。

我注释掉了NSRunLoop行,iDevice没有崩溃。但是,它不再每秒都更新。

我在这里做错了什么?

由于

2 个答案:

答案 0 :(得分:0)

您说您使用performSelector来调用FireOnLoad。为什么?如果你在后台线程上调用它,你需要知道NSRunLoop不是线程安全的,所以你不应该访问除主线程之外的主runloop。

答案 1 :(得分:0)

发现问题:

改变:

@property (weak, nonatomic) NSTimer *counter;

为:

@property (strong, nonatomic) NSTimer *counter;

如果您不使用ARC,则需要将strong替换为retain