美文网首页iOS程序员
iOS 开发-运行循环RunLoop监听Observer(四)

iOS 开发-运行循环RunLoop监听Observer(四)

作者: 037e3257fa3b | 来源:发表于2017-01-19 23:13 被阅读24次

直接上代码:一看你就懂了。

#import "ViewController.h"


@interface ViewController ()
/** 注释 */
//@property (nonatomic, strong) pthread_t thread;
@end

@implementation ViewController

#pragma mark ----------------------
#pragma mark Events
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
//    [self observer];
//    [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(task) userInfo:nil repeats:YES];
    
    [NSThread detachNewThreadSelector:@selector(task) toTarget:self withObject:nil];
}

- (IBAction)sourceBtnClick:(id)sender
{
    NSLog(@"%s",__func__);
}

#pragma mark ----------------------
#pragma mark
-(void)task
{
    NSLog(@"%s",__func__);
    
//    [NSRunLoop currentRunLoop] runUntilDate:[];
}

-(void)observer
{
    //1.创建监听者
    /*
     第一个参数:怎么分配存储空间
     第二个参数:要监听的状态 kCFRunLoopAllActivities 所有的状态
     第三个参数:时候持续监听
     第四个参数:优先级 总是传0
     第五个参数:当状态改变时候的回调
     */
    CFRunLoopObserverRef observer = CFRunLoopObserverCreateWithHandler(CFAllocatorGetDefault(), kCFRunLoopAllActivities, YES, 0, ^(CFRunLoopObserverRef observer, CFRunLoopActivity activity) {
        
        /*
         kCFRunLoopEntry = (1UL << 0),        即将进入runloop
         kCFRunLoopBeforeTimers = (1UL << 1), 即将处理timer事件
         kCFRunLoopBeforeSources = (1UL << 2),即将处理source事件
         kCFRunLoopBeforeWaiting = (1UL << 5),即将进入睡眠
         kCFRunLoopAfterWaiting = (1UL << 6), 被唤醒
         kCFRunLoopExit = (1UL << 7),         runloop退出
         kCFRunLoopAllActivities = 0x0FFFFFFFU
         */
        switch (activity) {
            case kCFRunLoopEntry:
                NSLog(@"即将进入runloop");
                break;
            case kCFRunLoopBeforeTimers:
                NSLog(@"即将处理timer事件");
                break;
            case kCFRunLoopBeforeSources:
                NSLog(@"即将处理source事件");
                break;
            case kCFRunLoopBeforeWaiting:
                NSLog(@"即将进入睡眠");
                break;
            case kCFRunLoopAfterWaiting:
                NSLog(@"被唤醒");
                break;
            case kCFRunLoopExit:
                NSLog(@"runloop退出");
                break;
                
            default:
                break;
        }
    });
    
    /*
     第一个参数:要监听哪个runloop
     第二个参数:观察者
     第三个参数:运行模式
     */
    CFRunLoopAddObserver(CFRunLoopGetCurrent(),observer, kCFRunLoopDefaultMode);
    
    //NSDefaultRunLoopMode == kCFRunLoopDefaultMode
    //NSRunLoopCommonModes == kCFRunLoopCommonModes
}

@end

相关文章

  • iOS 开发-运行循环RunLoop监听Observer(四)

    直接上代码:一看你就懂了。

  • # iOS开发之RunLoop

    iOS开发之RunLoop 什么是RunLoop 运行循环,跑圈 其实内部就是do-while循环,在这个循环n内...

  • Runloop

    Runloop 运行循环 --- > 死循环 目的: 1.保证当前线程不退出 2.负责监听事件 ios中的网络事件...

  • runloop

    Runloop-- 运行循环(死循环) 目的:1、保证runloop所在线程不退出2、负责监听事件(触摸 时钟 ...

  • iOS底层day8 - RunLoop

    什么是RunLoop 运行循环,可以在程序运行中做一些事情(处理source、timer、observer),一个...

  • iOS原理(七)----runloop

    iOS原理(七)----runloop runloop:顾名思义,运行循环,在程序运行过程中循环做一些事情,保持程...

  • runloop

    runloop 一个运行循环,保证程序不退出 负责处理各种事件(source、timer、observer) 没有...

  • iOS RunLoop 相关面试题

    RunLoop监听 Runloop运行逻辑

  • RunLoop详解

    RunLoop介绍   顾名思义,运行循环,是程序在运行中做的一些事情,RunLoop是iOS运行过程中循环做一些...

  • 用RunLoop监听运行循环

    // ViewController.m // 运行循环RunLoop // // Created by xue o...

网友评论

    本文标题:iOS 开发-运行循环RunLoop监听Observer(四)

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