• NSTimer 的简易使用方法


      一、使用方式


    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的定时器方法来实现定时器功能,并讲述其区别。
     
     
     
     
     
     
  • 相关阅读:
    详细的描述一个测试活动完整的过程
    黑盒测试的测试用例常见设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。
    测试计划工作的目的是什么?测试计划文档的内容应该包括什么?其中哪些是最重要的?
    redo log 有什么作用?
    Spring的简介和优点?
    java的语法基础(二)
    相对于Statement,PreparedStatement的优点是什么?
    MyBatis 的好处是什么?
    python中字符串的编码和解码
    相对于Statement,PreparedStatement的优点是什么?
  • 原文地址:https://www.cnblogs.com/firstrate/p/7134532.html
Copyright © 2020-2023  润新知