我正在开发一款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没有崩溃。但是,它不再每秒都更新。
我在这里做错了什么?
由于
答案 0 :(得分:0)
您说您使用performSelector
来调用FireOnLoad。为什么?如果你在后台线程上调用它,你需要知道NSRunLoop不是线程安全的,所以你不应该访问除主线程之外的主runloop。
答案 1 :(得分:0)
发现问题:
改变:
@property (weak, nonatomic) NSTimer *counter;
为:
@property (strong, nonatomic) NSTimer *counter;
如果您不使用ARC,则需要将strong
替换为retain