码迷,mamicode.com
首页 > 移动开发 > 详细

IOS RunLoop浅析 三

时间:2017-06-18 22:45:47      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:分享   exit   for   函数   oop   ret   nsset   efault   手动   

经过两篇的介绍我想对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

 

IOS RunLoop浅析 三

标签:分享   exit   for   函数   oop   ret   nsset   efault   手动   

原文地址:http://www.cnblogs.com/wuyuxin/p/7045574.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!