一、使用方式

1.声明NSTimer方法
 
static CGFloat sIntervalTime = 15.f; //定时刷新时间间隔
@property (nonatomic, strong) NSTimer *queryNoticeTimer;
 
 
2.开启定时器,初始化定时器方法,注意一点是一定要先停止定时器判断,再开启,否则会出现内存泄漏哒,userInfo字段是传递数据时会用到,当调用定时器时候,需要传递参数时,可以生命userInfo方法。
- (void)startQueryTimer
{
    [self stopQueryTimer];
   
    if (nil == _queryNoticeTimer) {
        _queryNoticeTimer = [NSTimerscheduledTimerWithTimeInterval:sIntervalTimetarget:self
                                                           selector:@selector(headerAutoVoid)
                                                           userInfo:nilrepeats:YES];
    }
}
3.停止定时器,先判断下这个对象是否存在,存在的话释放内存,invalidate 负责将定时器从运行循环中移除,然后一定要将其设置为空指针操作,才能真正释放此对象
- (void)stopQueryTimer
{
    if (self.queryNoticeTimer) {
       
        [self.queryNoticeTimer invalidate];
        _queryNoticeTimer = nil;
    }
}
4.使用场景:让此页面定期刷新网络请求,这种情况需要在 生命周期 页面开启前加载定时器,然后在页面将要消失期间停止定时器,以防止内存泄漏,如下是页面使用定时器的方法
 
 
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    // 处理导航栏
    CGFloat distY = scrollView.contentOffset.y;
    [self.barView animateByOffsetY:distY];
   
    [self stopQueryTimer];
    [self startQueryTimer];
}
- (void)viewDidDisappear:(BOOL)animated
{
    [superviewDidDisappear:animated];
    [self stopQueryTimer];
}

- (void)viewDidAppear:(BOOL)animated
{
    [superviewDidAppear:animated];
   
    if (![_queryNoticeTimer isValid]) {
        [self startQueryTimer];
    }
}

 
- (void)releaseSelf
{
    [super releaseSelf];
   
    [self stopQueryTimer];
}
 
 
二、我的想法
 
定时器实现起来并不难,我用的是最简单的方法,OC中有五种方法来初始化定时器,这个方法不需要手动调用fair,会自动执行,并且自动加入主循环池,较为便捷,其他方法某些需要手动加入循环池,或者调用fair,很容易出现问题,能用简洁的方式解决,就不要用复杂的方法。定时器比较容易内存泄漏,所以控制内存泄漏是定时器需要注意的操作。
 
三、思考与行动:
 
1.这个定时器的原理是什么样的?为什么不能通过sleep()函数来模拟定时器,通过for循环来实现此功能?
 
2.iOS 的定时器和Android的定时器实现机制是否有区别?区别在哪里?为什么会有差异?
 
3.你用定时器的时候,踩到了哪些坑?这篇文还有哪些需要完善的地方?
 
4.分别通过5种OC的定时器方法来实现定时器功能,并讲述其区别。
 
 
 
 
 
 

NSTimer 的简易使用方法的更多相关文章

  1. ORACLE PL/SQL 中序列(sequence)的简易使用方法介绍

    如果我是C罗 原文 ORACLE PL/SQL 中序列(sequence)的简易使用方法介绍 sequence在ORACLE中应用十分广泛,就是序列号的意思,会自动增加指定变数,如逐次增加1或者2或者 ...

  2. IOS中集合视图UICollectionView中DecorationView的简易使用方法

    转载自:   http://www.it165.net/pro/html/201312/8575.html Decoration View是UICollectionView的装饰视图.苹果官方给的案例 ...

  3. .Net 下采用GET/POST/SOAP方式动态调用WebService的简易灵活方法(C#) [轉]Redfox

    一直以来,我都为动态调用WebService方法而烦恼.在.Net环境下,最常用的方法就是采用代理类来调用WebService,可以通过改变代理类的Url属性来实现动态调用,但当xmlns改变时就会出 ...

  4. TuSDK 简易使用方法 持有图片对象方式

    TuSDK 为涂图照相应用的SDK,打包后文件大小约为5M,缺点为包比较大,且图片清晰度较差一些,优点为直接可以引用滤镜贴纸,方便易用.   使用方法如下:    1.AppDelegate.m 中加 ...

  5. jquery tips简易使用方法 新手必看

    使用jquery1.12.4以上版本 使用jquery插件 tips .beg-pull-right 点击时的选择器 在这里写的是一个类选择器   记得引入jquery $(".beg-pu ...

  6. tar 命令 简易使用方法

    创建压缩文件方法 tar zcf 压缩包存放位置 压缩那个目录/内容 (压缩) 例:在/data目录下压缩/etc/目录,并创建名称为etc.tar.gz [root@web01 /]# tar zc ...

  7. 三种初步简易的方法求解数值问题 of C++

    1. “二分法解方程” 在二分法中,从区间[a,b]开始,用函数值f(a)与f(b)拥有相反的符号.如果f在这个区间连续,则f的图像至少在x=a,x=b之间穿越x轴一次,因此方程f(x)=0在[a,b ...

  8. Golint的简易使用方法

    根据作者的说法: Golint is a linter for Go source code. Golint differs from gofmt. Gofmt reformats Go source ...

  9. ADB简易安装方法

    ADB安装方法: 1. 下载ADB程序 下载地址: 链接:https://pan.baidu.com/s/1CfQL51pBz-2Wk_cYfJYXUw  提取码:bjp8 2. 配置环境变量 pat ...

随机推荐

  1. Android中SQLite数据库操作(2)——使用SQLiteDatabase提供的方法操作数据库

    如果开发者对SQL语法不熟,甚至以前从未使用过任何数据库,Android的SQLiteDatabase提供了insert.update.delete或query语句来操作数据库. 一.insert方法 ...

  2. wpf mvvm模式下CommandParameter传递多参

    原文:wpf mvvm模式下CommandParameter传递多参 CommandParameter一般只允许设置一次,所以如果要传递多参数,就要稍微处理一下.我暂时还没找到更好的方案,下面介绍的这 ...

  3. [Scikit-Learn] - 数据预处理 - 缺失值(Missing Value)处理

    reference : http://www.cnblogs.com/chaosimple/p/4153158.html 关于缺失值(missing value)的处理 在sklearn的prepro ...

  4. 11991 - Easy Problem from Rujia Liu?(的基础数据结构)

    UVA 11991 - Easy Problem from Rujia Liu? 题目链接 题意:给一个长度n的序列,有m询问,每一个询问会问第k个出现的数字的下标是多少 思路:用map和vector ...

  5. 计算广告(computational advertising)

    计算广告学是一门由信息科学.统计学.计算机科学以及微观经济学等学科交叉融合的新兴分支学科. 1. 课程与资源 Andrei Broder:美国工程院院士,计算广告概念的提出者: MS&E 23 ...

  6. Apache Cordova开发环境搭建(二)VS Code

    原文:Apache Cordova开发环境搭建(二)VS Code 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u011127019/articl ...

  7. 1 开始ThreeJs

    因为需要 需要一款 网页上的 游戏引擎 通过百度知道了 three.js 1.先从github上clone下源码  https://github.com/mrdoob/three.js 2.下载web ...

  8. 使用WPF创建画图箭头

    原文:使用WPF创建画图箭头 今天要给leader line画个箭头,所以就google一下,找到下面的文章,写的不错,可以实现我的需求,所以就摘录下来. 我把源代码中的arraw.cs加入到我的工程 ...

  9. WPF“天狗食月”效果

    原文:WPF"天狗食月"效果 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yangyisen0713/article/deta ...

  10. kendo ui gird温馨提示(使用本地数据) 一个

    加入js引用 <link href="http://cdn.kendostatic.com/2014.2.716/styles/kendo.common.min.css" r ...