你好,歡迎來到IOS教程網

 Ios教程網 >> IOS使用技巧 >> IOS技巧綜合 >> iOS RunLoop簡介

iOS RunLoop簡介

編輯:IOS技巧綜合
[摘要]本文是對iOS RunLoop簡介的講解,對學習IOS蘋果軟件開發有所幫助,與大家分享。

一、什麼是RunLoop?

RunLoop是運行循環,每個Cocoa應用程序都由一個處於阻塞狀態的do/while循環驅動,當有事件發生時,就把事件分派給合適的監聽器,如此反復直到循環停止。處理分派的對象就叫做“運行循環”。

基本作用:1、保持程序的持續運行 2、處理App中的各種事件(比如觸摸事件、定時器事件、Selector事件)3、節省CPU資源,提高程序性能:該做事時做事,該休息時休息。

二、RunLoop的基礎

  每條線程都有唯一的一個與之對應的RunLoop對象

  主線程的RunLoop已經自動創建好了,子線程的RunLoop需要主動創建

  RunLoop在第一次獲取時創建,在線程結束時銷毀。

  2.1獲得RunLoop對象

  1、Foundation

  [NSRunLoop currentRunLoop]; // 獲得當前線程的RunLoop對象

  [NSRunLoop mainRunLoop]; // 獲得主線程的RunLoop對象

  2、Core Foundation

  CFRunLoopGetCurrent(); // 獲得當前線程的RunLoop對象

  CFRunLoopGetMain(); // 獲得主線程的RunLoop對象

  2.2 Core Foundation中關於RunLoop的5個類

  CFRunLoopRef、CFRunLoopModeRef、CFRunLoopSourceRef、CFRunLoopTimerRef、CFRunLoopObserverRef

  2.2.1 CFRunLoopModeRef代表RunLoop的運行模式

  一個 RunLoop 包含若干個 Mode,每個Mode又包含若干個Source/Timer/Observer

  每次RunLoop啟動時,只能指定其中一個 Mode,這個Mode被稱作 CurrentMode

  如果需要切換Mode,只能退出Loop,再重新指定一個Mode進入

  這樣做主要是為了分隔開不同組的Source/Timer/Observer,讓其互不影響

    系統默認注冊了5個Mode:
    kCFRunLoopDefaultMode:App的默認Mode,通常主線程是在這個Mode下運行 UITrackingRunLoopMode:界面跟蹤 Mode,用於 ScrollView 追蹤觸摸滑動,保證界面滑動時不受其他 Mode 影響
    UIInitializationRunLoopMode: 在剛啟動 App 時第進入的第一個 Mode,啟動完成後就不再使用 GSEventReceiveRunLoopMode: 接受系統事件的內部 Mode,通常用不到 kCFRunLoopCommonModes: 這是一個占位用的Mode,不是一種真正的Mode

  2.2.2CFRunLoopSourceRef是事件源(輸入源)

    以前的分法
    Port-Based Sources Custom Input Sources Cocoa Perform Selector Sources
    現在的分法
    Source0:非基於Port的 Source1:基於Port的

  2.2.3CFRunLoopTimerRef是基於時間的觸發器

    基本上說的就是NSTimer

  2.2.4CFRunLoopObserverRef是觀察者,能夠監聽RunLoop的狀態改變

    可以監聽的時間點有以下幾個

  

三、RunLoop處理邏輯

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved