美文网首页iOS Developer
运行循环RunLoop

运行循环RunLoop

作者: 蜗蜗牛在奔跑 | 来源:发表于2017-04-24 11:57 被阅读18次
    //
    //  ViewController.m
    //  运行循环RunLoop
    //
    //  Created by xue on 2017/4/19.
    //  Copyright © 2017年 liangxue. All rights reserved.
    //
    
    #import "ViewController.h"
    
    @interface ViewController ()
    
    @property (nonatomic,strong) NSTimer *timer;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
    //    NSTimer *timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(updateTimer) userInfo:nil repeats:YES];
    //    
    //    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
    //
        
        _timer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(timerMethod) userInfo:nil repeats:YES];
        
        [self addRunloopObserver];
        
        // Do any additional setup after loading the view, typically from a nib.
    }
    
    //什么也不干,只是为了让runloop起来
    - (void)timerMethod{
        
    }
    //千万不要做耗时操作
    - (void)updateTimer{
        
        static int num = 0;
        [NSThread sleepForTimeInterval:1.0];
    
        NSLog(@"%@   %d",[NSThread currentThread],num++);
        
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    // 监听runloop
    - (void)addRunloopObserver{
        //获取当前runloop
        CFRunLoopRef runloop = CFRunLoopGetCurrent();
        //定义一个上下文
        CFRunLoopObserverContext context = {
            0,
            (__bridge void *)self,
            &CFRetain,
            &CFRelease,
            NULL
        };
        //定义一个观察者  callback回掉函数
        static CFRunLoopObserverRef defaultObserver;
       defaultObserver  = CFRunLoopObserverCreate(NULL, kCFRunLoopBeforeWaiting, YES, NSIntegerMax - 999, &CallBack, &context);
        
        //添加当前runloop 的观察者
        
        CFRunLoopAddObserver(runloop, defaultObserver, kCFRunLoopDefaultMode);
        
        //释放
        
        CFRelease(defaultObserver);
    }
    //runloop回掉函数
    static void CallBack(){
        
        NSLog(@"lalal");
    }
    @end
    

    相关文章

      网友评论

        本文标题:运行循环RunLoop

        本文链接:https://www.haomeiwen.com/subject/cpzuzttx.html