一、使用方式

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. 【19.05%】【codeforces 731F】 Video Cards

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  2. 【44.19%】【codeforces 727C】Guess the Array

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  3. ASP.NET中前台如何调用后台变量

    .Asp.Net中几种相似的标记符号: < %=...%>< %#... %>< % %>< %@ %>解释及用法 答: < %#... %> ...

  4. ssh基础(1)

    1.链接远程 命令:ssh root@1.1.1.1 2.执行远程脚本 命令:ssh root@1.1.1.1  /data/demo/test.sh > 111.txt   (执行远程的tes ...

  5. xshell登陆Win10 Linux子系统

    原文:xshell登陆Win10 Linux子系统 版权声明:转载请注明出处 https://blog.csdn.net/anychenp/article/details/78922320 修改端口 ...

  6. VirtualBox虚拟机网络环境Host-Only(对Win10和VirtualBox都有截图)

    之前在选择配置虚拟机网络环境的时候 桥接也是不错的,但是自己在使用的时候由于访问频繁会出现断网现象.所以就开始使用Host-Only模式.开始并不是很明白为什么这么设置,也挖了很多坑.经常出现虚拟机无 ...

  7. Linux性能测试 top衍生命令 atop/htop/slaptop

    1. Atop Atop 是一个类似 top 的工具,但比 top 更有料.通过 Atop,你能够监视 Linux 系统的性能状况,包括进程活动.CPU.内存.硬盘.网络等方面的使用情况等. 2. h ...

  8. thinkphp3.2定义多模块并设置默认模块

    前台入口文件index.php <?php // +---------------------------------------------------------------------- ...

  9. GameBuilder见缝插针游戏开发系列(AA)

    今天推出了一款游戏叫<AA>.在最近IOS只是弹出一个游戏.非常心脏的孩子,但有很多乐趣.今天,我们谈论它tangide(GameBuilderV2.0)用控件UICanvas实现它. 在 ...

  10. 在 DEBIAN 上安装 SQL SERVER

    微软在开源 .NET Framework 之后,相继推出了跨平台的编辑器 Visual Studio Code,跨平台的 SQL Server 数据库 SQL Server vNext,Visual ...