一、使用方式

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. padding百分百值是相对谁的百分比

    先看代码 <head> <meta charset="UTF-8"> <title>Document</title> <sty ...

  2. 寄存器,cache、伙伴系统、内存碎片、段式页式存储管理

    cache.伙伴系统.内存碎片.段式页式存储管理 目录 分层的存储管理 cache 局部性原理 置换算法 写回策略 linux环境下的cache 连续内存分配与内存碎片 内部碎片与外部碎片 动态分区分 ...

  3. smarty循环

    1. 功能说明,在页面使用smarty循环100次输出,类似for循环100次{section name=total loop=100}{$smarty.section.total.index+1} ...

  4. Android开发小知识

    修改Android app图标(Android Studio) 1.  res\drawable 放置icon.png(此图片是你需要修改的图标); 2.  修改AndroidManifest.xml ...

  5. lua--从白开始(2)

    眼下lua最新的版本号,5.2.3. 这个例子是一个简单lua分析器,来源自<Lua游戏开发实践指南>. 测试程序的功能:解决简单lua说明,例如:print("Hello wo ...

  6. SQL中的JOIN语法详解

    参考以下两篇博客: 第一个是 sql语法:inner join on, left join on, right join on详细使用方法 讲了 inner join, left join, righ ...

  7. Single-stack real-time operating system for embedded systems

    A real time operating system (RTOS) for embedded controllers having limited memory includes a contin ...

  8. C++异常处理入门

    引言 异常,让一个函数可以在发现自己无法处理的错误时抛出一个异常,希望它的调用者可以直接或者间接处理这个问题.而传统错误处理技术,检查到一个局部无法处理的问题时: 1.终止程序(例如atol,atoi ...

  9. Android Fragment——详细解释

    1.Fragment概述 在一个Activity中. Fragment代表UI的一个部分或者一个行为.一个Activity能够结合多个Fragment对象,也能够在多个activity中使用同样Fra ...

  10. Android自注-15-Activity生命周期

    很长一段时间没有写博客,懒,感慨一下. Activity的生命周期是一块以下附图: 通过代码下面简单的介绍一下.一些内容看代码的凝视: package com.mxy; import android. ...