zoukankan      html  css  js  c++  java
  • iOS开发之NSTimer使用初探

    创建一个定时器(NSTimer)

    - (void)viewDidLoad {
        [super viewDidLoad];
        [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(actionTimer:) userInfo:nil repeats:YES];
    }
    
    - (void)actionTimer:(NSTimer *)timer
    {
    
    }
    

    NSTimer默认运行在default mode下,default mode几乎包括所有输入源(除NSConnection) NSDefaultRunLoopMode模式。

    actionTimer方法会每隔1s中被调用一次。NSTimer使用起来是不是非常简单。这是NSTimer比较初级的应用。

    当主界面被滑动时NSTimer失效了

    主界面被滑动是什么意思呢?就是说主界面有UITableView或者UIScrollView,滑动UITableView或者UIScrollView。这个时候NSTimer失效了。

    我们来写一个demo,在一个有UITableView的UIViewController上启动定时器,每1s数字加1,并将这个数字显示在UILabel上面.

    - (void)viewDidLoad {
        [super viewDidLoad];
        [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(actionTimer:) userInfo:nil repeats:YES];
    }
    
    - (void)actionTimer:(NSTimer *)timer
    {
        self.number++;
        self.label.text = [NSString stringWithFormat:@"%d",self.number];
        NSLog(@"%d",self.number);
    }
    

    关于UITableView和UILabel的创建我省去了。详细的代码可以点击这里下载:iOSStrongDemo,iOSStrongDemo我会不断更新,大家在github上star一下。

    这样当用户在拖动UITableView处于UITrackingRunLoopMode时,NSTimer就失效了,不能fire。self.label上的数字也就无法更新。

    nstimer1

    修改NSTimer的run loop

    解决方法就是将其加入到UITrackingRunLoopMode模式或NSRunLoopCommonModes模式中。

    [[NSRunLoop currentRunLoop] addTimer:timer forMode:UITrackingRunLoopMode];
    

    或者

    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
    

    NSRunLoopCommonModes:是一个模式集合,当绑定一个事件源到这个模式集合的时候就相当于绑定到了集合内的每一个模式。

    nstimer1

    代码下载地址::iOSStrongDemo

     

  • 相关阅读:
    CentOS 6 + bochs-2.6 + gdb 调试 linux 0.11 —— 成功
    操作系统原理——互斥同步
    CentOS 6 bochs-2.6 gdb 调试 linux 0.11——bochsrc-fd1-gdb.bxrc
    vim+xxd=强大的十六进制编辑器
    【t043】成绩查询
    【u251】心灵的抚慰
    【t041】距离之和
    【t086】防护伞
    Java Web整合开发(37) -- SVN
    ubuntu命令
  • 原文地址:https://www.cnblogs.com/easyToCode/p/5196891.html
Copyright © 2011-2022 走看看