IOS RunLoop淺析 二,iosrunloop淺析

來源:互聯網
上載者:User

IOS RunLoop淺析 二,iosrunloop淺析

上一篇我們說了runloop 的幾種模式,那麼我們在模式中又要做些什麼呢???

模式中有三個模組:

事件來源(輸入源) Source

Source:

按照官方文檔分類

Port-Based 

Custom Input

Cocoa Perform Selector

按照函數調用棧,Source的分類

Source0:非基於Port的

Source1:基於Port的,通過核心和其他線程通訊,接受,分發系統事件。

(這裡沒什麼太大用,剩下的Source概念我就不介紹了有興趣可以去別處查查)

觀察者 Observer

觀察者的作用便是監聽runloop中正在執行的狀態

狀態有以下幾種

所監聽的狀態:

     kCFRunLoopEntry = (1UL << 0),  1

     kCFRunLoopBeforeTimers = (1UL << 1),  2

     kCFRunLoopBeforeSources = (1UL << 2),  4

     kCFRunLoopBeforeWaiting = (1UL << 5),  32

     kCFRunLoopAfterWaiting = (1UL << 6), 64

     kCFRunLoopExit = (1UL << 7),  128

     kCFRunLoopAllActivities = 0x0FFFFFFFU

我們可以選擇監聽不同的狀態實現不同的操作

下面的代碼中是實現見天所有狀態

////  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),  1     kCFRunLoopBeforeTimers = (1UL << 1),  2     kCFRunLoopBeforeSources = (1UL << 2),  4     kCFRunLoopBeforeWaiting = (1UL << 5),  32     kCFRunLoopAfterWaiting = (1UL << 6),  64     kCFRunLoopExit = (1UL << 7),  128     kCFRunLoopAllActivities = 0x0FFFFFFFU     */    CFRunLoopObserverRef observe = CFRunLoopObserverCreateWithHandler(CFAllocatorGetDefault(), kCFRunLoopAllActivities, YES, 0, ^(CFRunLoopObserverRef observer, CFRunLoopActivity activity) {                NSLog(@"監聽到runloop-- %zd",activity);            });    //添加觀察者    CFRunLoopAddObserver(CFRunLoopGetCurrent(), observe, kCFRunLoopDefaultMode);}@end

示範效果為:

仔細觀察不難發現當運行到最後我不在操作時,日誌停止列印。

這是為什麼呢???仔細觀察所有狀態便知道,因為到了休眠狀態。

為了證明這一觀點 我們一直點擊螢幕測試一下。

(測試結果後面一直輸出32實際上是不符合邏輯的,因為我在一直*快速*點擊。)

(正常情況應該會出現64等)

因為沒有其他狀態存在所以一直為休眠狀態(具體流程我會在下一篇進行介紹)

掌握好這一點對開發會有很大好處。

定時器 NSTimer

由於第一篇是用定時器簡單介紹了runloop因此在這裡就不加以追訴。

沒有看到第一篇的可以在文章結尾處點擊上一篇即可。

 

    

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.