2 starwar2012 starwar2012 于 2013.01.08 10:28 提问

NSTimer没有执行预期效果

不知道我的问题是不是很好解决,请大家帮忙

有一个类,是NSTimer类型的timer,当执行IBAction时,调用一个方法,里面有下面代码:

if (timer) timer = nil;
timer = [NSTimer timerWithTimeInterval:0.2 target:self selector:@selector(removeOverlay) userInfo:nil repeats:NO];

类中还有另一个方法:

- (void)removeOverlay {
...
}

但是没有像预期的间隔0.2秒之后触发

不知道为什么?

2个回答

zhanglei5415
zhanglei5415   Rxr 2013.01.08 11:46
已采纳

不用scheduled方式初始化的,需要手动addTimer:forMode: 将timer添加到一个runloop中。而scheduled的初始化方法将以默认mode直接添加到当前的runloop中.

举例:

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:@selector(timerFired:) userInfo:nil repeats:NO];

NSTimer *myTimer = [NSTimer timerWithTimeInterval:3.0 target:selfselector:@selector(timerFired:) userInfo:nil repeats:NO];
[[NSRunLoop currentRunLoop] addTimer:myTimer forMode:NSDefaultRunLoopMode];
cmdn_hollylee
cmdn_hollylee   2013.01.08 11:36

没有 schedule 这个 NSTimer 对象. 请去仔细看一下 NSTimer 的文档, 看如何把 NSTimer 加入到 RunLoop 里去

starwar2012
starwar2012 (⊙o⊙)
5 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
NSTimer方法不执行的问题
最近, 在使用NSTimer的时候,发现了一个问题,在当前界面NSTimer的方法是可以执行的,但是当我push到下一界面, 做完相关操作,pop回来的时候,UI刷新,再次调用定时器时,发现方法竟然不执行了, 开始以为是线程阻塞,后来发现是NSTimer创建的问题。NSTimer 创建是有两种方式的: + (NSTimer *)timerWithTimeInterval:(NSTimeInterva
[iOS]NSTimer 不触发事件的解决
1.创建NSTimer使用scheduledTimerWithTimeInterval方法创建的NSTimer会以默认方式加入当前NSRunLoop中使用 timerWithTimeInterval initWithFireDate 创建需要手动加入一个NSRunLoop中scheduledTimerWithTimeInterval:invocation:repeats: scheduledTime
NSTImer重复执行任务
m 问题 应用需要调度代码以在特定的时间执行。此外,你还想要重复执行任务。 解决方案 使用NSTimer调度代码以在特定的时间执行。为了使用NSTimer,你需要有日期对象与指向应用的运行循环的引用。 注意: NSTimer需要有运行循环,如果想在Mac或iOS应用中使用定时器,就必须有运行循环。本攻略需要应用带有运行循环。1.11与1.12节分别介绍了创建Ma
iOS中NSTimer的invalidate调用之后
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流之用,请勿进行商业用途。同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该翻译稿之人无任何关系。谢谢合作! 一旦一个定时器被创建并且被添加进一个运行循环(run loop),
swift中NSTimer的使用
github:https://github.com/potato512/SYSwiftLearning swift中使用NSTimer,效果图如下: 代码示例: // 定义常量 let tagLabel = 1000;// 定义变量 var timer:NSTimer!; var count:NSInteger = 0;// 实例化方法 func createNSTimer() {
NSTimer直接使用需要在主线程中使用
NSTimer 的 scheduledTimerWithTimeInterval  方法使用时需要在主线程中使用否则不会执行的。 1. NSRunLoopCommonModes和Timer     当使用NSTimer的scheduledTimerWithTimeInterval方法时。事实上此时Timer会被加入到当前线程的Run Loop中,且模式是默认的NSDef
IOS开发之关于NSTimer使用
看到这个标题,你可能会想NSTimer不就是计时器吗,谁不会用,不就是一个能够定时的完成任务的东西吗?   我想说你知道NSTimer会retain你添加调用方法的对象吗?你知道NSTimer是要加到runloop中才会起作用吗?你知道NSTimer会并不是准确的按照你指定的时间触发的吗?你知道NSTimer就算添加到runloop了也不一定会按照你想象中的那样执行吗?   如果上面提
UITableViewCell使用NSTimer导致Cell的dealloc方法不被调用
我们在开发的过程中会遇到这样的情况,就是TableView的每一个cell都有yi'ge
NStimer 被阻塞
我们在界面上滚动一个scrollview,那么我们会发现在停止滚动前,会发现NSTimer未被执行,就好像scrollView在滚动的时候将timer暂停了一样,在查看相应文档后发现,这其实就是runloop的mode在做怪。 runloop可以理解为cocoa下的一种消息循环机制,用来处理各种消息事件,我们在开发的时候并不需要手动去创建一个runloop,因为框架为我们创建了一个默认的runl
NSTimer产生的问题及解决方案
计时器可以指定绝对的日期和时间,以便到时执行任务也可以指定执行的任务的相对延迟时间,还可以重复运行任务。计时器要和runloop相关联,运行循环到时候会触发任务。虾米昂这个方法可以创建并预先安排到当前运行循环中:   + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector: