zoukankan      html  css  js  c++  java
  • IOS RunLoop浅析 三

    经过两篇的介绍我想对RunLoop应该有了简单的了解,至少不至于一无所知。

    在这篇我想对“CFRunLoopObserverRef”做一下简单的补充。

    在补充之前先说一下。

    在现在的开发中已经很少见到MRC了。

    但是那是对与OC对象的。

    CFRunLoopObserverRef属于CF (Core Foundation)

    所以我们需要手动释放。

    规则如下:

    凡是带有creat copy retain 等成分的函数创建出来的对象都要要在最后进行释放,即Release。

    复制代码
    //
    //  ViewController.m
    //  CX RunLoop浅析
    //
    //  Created by ma c on 16/3/29.
    //  Copyright © 2016年 xubaoaichiyu. All rights reserved.
    //
    
    #import "ViewController.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
    }
    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
        //添加observe
        /* 所监听的状态
         kCFRunLoopEntry = (1UL << 0),
         kCFRunLoopBeforeTimers = (1UL << 1),
         kCFRunLoopBeforeSources = (1UL << 2),
         kCFRunLoopBeforeWaiting = (1UL << 5),
         kCFRunLoopAfterWaiting = (1UL << 6),
         kCFRunLoopExit = (1UL << 7),
         kCFRunLoopAllActivities = 0x0FFFFFFFU
         */
        CFRunLoopObserverRef observe = CFRunLoopObserverCreateWithHandler(CFAllocatorGetDefault(), kCFRunLoopAllActivities, YES, 0, ^(CFRunLoopObserverRef observer, CFRunLoopActivity activity) {
            
            NSLog(@"监听到runloop-- %zd",activity);
            
        });
        //添加观察者
        CFRunLoopAddObserver(CFRunLoopGetCurrent(), observe, kCFRunLoopDefaultMode);
        //CF 内存管理 (Core Foundation)
        /*
         凡是带有creat copy retain 等成分的函数创建出来的对象都要要在最后进行释放,即Release。
         */
        CFRelease(observe);
    }
    @end
    复制代码

    上面是对CFRunLoopObserverRef的简单补充。

    下面在这里简单介绍一下RunLoop的处理逻辑。

    Runloop处理逻辑:

    1,通知Observer,即将进入loop

    2,通知Observer,将要处理timer

    3,通知Observer,将要处理Source0

    4,处理Source0

    5,如果有Source1,跳到第9步

    6,通知Obesrcer,线程即将休眠

    7,休眠,等待唤醒

    8,通知Observer,线程刚被唤醒

    9,处理唤醒时收到的消息,之后跳回2

    10,通知Oberver,即将退出Loop

  • 相关阅读:
    java 8新特性 匿名内部类的使用
    java 8新特性
    jmeter 性能测试
    idea 背景颜色设置
    SpringBoot yaml的配置及使用
    idea 类图显示
    SpringSecurity 获取认证信息 和 认证实现
    MySQL-慢查询日志
    微信小程序领取卡券
    ThinkPhp5-PHPExcel导出|导入 数据
  • 原文地址:https://www.cnblogs.com/wuyuxin/p/7045574.html
Copyright © 2011-2022 走看看