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活跃状态和关掉时一样的,要不然多线程一执行完成就会关掉,这样代理那些就执行不了

 

posted @ 2014-04-13 18:31  离子  阅读(1192)  评论(0编辑  收藏  举报