ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

iOS底层系列之<27>--Runloop<三>Runloop监听observer的方式

2022-01-20 10:35:37  阅读:226  来源: 互联网

标签:10 27 20 observer NSLog break 01 super Runloop


1、监听的方式一(C语言函数)

- (void)test10 {
    // 创建observer
    CFRunLoopObserverRef observer = CFRunLoopObserverCreate(kCFAllocatorDefault, kCFRunLoopBeforeWaiting | kCFRunLoopAfterWaiting, YES, 0, observeRunLoopActivities, NULL);
    // 添加observer到Runloop中
    CFRunLoopAddObserver(CFRunLoopGetMain(), observer, kCFRunLoopCommonModes);
    // 释放
    CFRelease(observer);
}

void observeRunLoopActivities(CFRunLoopObserverRef observer, CFRunLoopActivity activity, void *info) {
    switch (activity) {
        case kCFRunLoopEntry:
            NSLog(@"kCFRunLoopEntry");
            break;
        case kCFRunLoopBeforeTimers:
            NSLog(@"kCFRunLoopBeforeTimers");
            break;
        case kCFRunLoopBeforeSources:
            NSLog(@"kCFRunLoopBeforeSources");
            break;
        case kCFRunLoopBeforeWaiting:
            NSLog(@"kCFRunLoopBeforeSources");
            break;
        case kCFRunLoopAfterWaiting:
            NSLog(@"kCFRunLoopAfterWaiting");
            break;
        case kCFRunLoopExit:
            NSLog(@"kCFRunLoopExit");
            break;
        default:
            NSLog(@"default");
            break;
    }
}

触摸点击,调用

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self test10];
    
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    NSLog(@"%s",__func__);
}

打印结果:
2022-01-20 10:18:02.295228+0800 super-interview[34440:418395] kCFRunLoopAfterWaiting
2022-01-20 10:18:02.296370+0800 super-interview[34440:418395] -[ViewController touchesBegan:withEvent:]
2022-01-20 10:18:02.296564+0800 super-interview[34440:418395] kCFRunLoopBeforeSources
2022-01-20 10:18:02.296982+0800 super-interview[34440:418395] kCFRunLoopAfterWaiting
2022-01-20 10:18:02.297405+0800 super-interview[34440:418395] kCFRunLoopBeforeSources
2022-01-20 10:18:02.408768+0800 super-interview[34440:418395] kCFRunLoopAfterWaiting
2022-01-20 10:18:02.409163+0800 super-interview[34440:418395] kCFRunLoopBeforeSources

2、监听方式二(Block方式)

- (void)test11 {
    // 创建observer
    CFRunLoopObserverRef observer = CFRunLoopObserverCreateWithHandler(kCFAllocatorDefault, kCFRunLoopBeforeWaiting | kCFRunLoopAfterWaiting, YES, 0, ^(CFRunLoopObserverRef observer, CFRunLoopActivity activity) {
        switch (activity) {
            case kCFRunLoopEntry:
                NSLog(@"block--kCFRunLoopEntry");
                break;
            case kCFRunLoopBeforeTimers:
                NSLog(@"block--kCFRunLoopBeforeTimers");
                break;
            case kCFRunLoopBeforeSources:
                NSLog(@"block--kCFRunLoopBeforeSources");
                break;
            case kCFRunLoopBeforeWaiting:
                NSLog(@"block--kCFRunLoopBeforeSources");
                break;
            case kCFRunLoopAfterWaiting:
                NSLog(@"block--CFRunLoopAfterWaiting");
                break;
            case kCFRunLoopExit:
                NSLog(@"block--kCFRunLoopExit");
                break;
            default:
                NSLog(@"block--default");
                break;
        }
    });
    // 添加observer到Runloop中
    CFRunLoopAddObserver(CFRunLoopGetMain(), observer, kCFRunLoopCommonModes);
    // 释放
    CFRelease(observer);
}

调用

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self test11];
    
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    NSLog(@"%s",__func__);
}

打印结果:
2022-01-20 10:19:11.930278+0800 super-interview[34504:419754] block–CFRunLoopAfterWaiting
2022-01-20 10:19:11.931429+0800 super-interview[34504:419754] -[ViewController touchesBegan:withEvent:]
2022-01-20 10:19:11.931620+0800 super-interview[34504:419754] block–kCFRunLoopBeforeSources
2022-01-20 10:19:11.932087+0800 super-interview[34504:419754] block–CFRunLoopAfterWaiting
2022-01-20 10:19:11.932512+0800 super-interview[34504:419754] block–kCFRunLoopBeforeSources
2022-01-20 10:19:12.045637+0800 super-interview[34504:419754] block–CFRunLoopAfterWaiting
2022-01-20 10:19:12.046146+0800 super-interview[34504:419754] block–kCFRunLoopBeforeSources

标签:10,27,20,observer,NSLog,break,01,super,Runloop
来源: https://blog.csdn.net/JH_Cao/article/details/122595645

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有