iOS Developer

运行循环RunLoop

2017-04-24  本文已影响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
上一篇 下一篇

猜你喜欢

热点阅读