zoukankan      html  css  js  c++  java
  • ios-NSRunLoop以及定时器NSTimer-理解

      [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timeaction:) userInfo:@"liyang" repeats:NO];
           NSTimer *tt= [NSTimer timerWithTimeInterval:1 target:self selector:@selector(timeaction:) userInfo:@"limengxia" repeats:NO];
            [[NSRunLoop currentRunLoop]addTimer:tt forMode:NSDefaultRunLoopMode];
            [[NSRunLoop currentRunLoop]run];
    //NSRunLoop的理解,每一个线程都有一个NSRunLoop对象,然而定时器也是在这个对象上面运行的,当一个线程运行完成了过后,会自动关闭线程,自然NSRunLoop也会被销毁,自然定时器就不会运行,为了不让其线程关闭,用此语句   
    [[NSRunLoop currentRunLoop]run];那么线程就会保持活跃状态(前提是这个线程里面还有需要被执行的东西,比如说定时器,网络请求等(经过测试的,网络请求,GCD也一样),(这可能是一种优化,单凭这句话,还不能将此线程保持活跃,必须有需要执行的东西)),不会被关闭,自然定时器也就能用了,
    [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timeaction:) userInfo:@"liyang" repeats:NO];这么设置的定时器是自动添加到了NSRunLoop中的,
    NSTimer *tt= [NSTimer timerWithTimeInterval:1 target:self selector:@selector(timeaction:) userInfo:@"limengxia" repeats:NO];这个定时器需要手动添加
    [[NSRunLoop currentRunLoop]addTimer:tt forMode:NSDefaultRunLoopMode];

     如果要使定时器精确,最好将这个定时器放到多线程上去,防止线程阻塞,影响定时器的精确度

     CFRunLoopRun();
        CFRunLoopStop(CFRunLoopGetCurrent());
    //最好是成对的出现,这个和上面的维持runloop活跃状态和关掉时一样的,要不然多线程一执行完成就会关掉,这样代理那些就执行不了
    1.这里只记录一些学习笔记 2.这里只记录一些学习心得,如果心得方向有错,请留言 2.这里只记录一些日记(只为提升英语,暂时有点忙,等转行了开始写)
  • 相关阅读:
    最短路径 一 Dijkstra 模板(O(n^2))
    【转】STL中的set容器的一点总结
    水题 等差数列HDU 5400 Arithmetic Sequence
    贪心+等价转化 HDU 1489
    POJ 3258 最小值最大化 二分搜索
    【转】二分查找算法学习札记
    UVa 714 Copying books 贪心+二分 最大值最小化
    湖南程序设计竞赛赛题总结 XTU 1237 Magic Triangle(计算几何)
    并查集基础 模板题 hdu1232 畅通工程
    数论 最简分数 Farey序列求最简分数+POJ3374
  • 原文地址:https://www.cnblogs.com/liyang31tg/p/3662557.html
Copyright © 2011-2022 走看看