iOS開發(fā)-運(yùn)行循環(huán)RunLoop介紹(一)

1.什么是運(yùn)行循環(huán)RunLoop
從字面上理解就是運(yùn)行循環(huán)、死循環(huán)、處于一個不斷運(yùn)行的狀態(tài)。

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

3.感受運(yùn)行循環(huán)的存在

// 一般的Main函數(shù)
int main(int argc, char * argv[]) {
    NSLog(@"execute main function");  // 程序開始
    return 0;                // 程序結(jié)束
}

// 一個OC項(xiàng)目的Main函數(shù)

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

// 我們可以接受一下返回值
int main(int argc, char * argv[]) {
    @autoreleasepool {
        int returnValue = UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
      NSLog(@"%d", returnValue);
      return returnValue;
    }
}
// 測試可以發(fā)現(xiàn)程序不會結(jié)束,也就是不會返回一個值。這是因?yàn)閁IApplicationMain函數(shù)內(nèi)部就啟動了一個RunLoop
所以UIApplicationMain函數(shù)一直沒有返回,保持了程序的持續(xù)運(yùn)行
這個默認(rèn)啟動的RunLoop是跟主線程相關(guān)聯(lián)的

4.iOS中訪問RunLoop的兩套API,一套是Foundation框架中的NSRunLoop,一套是Core Foundation框架中的CFRunLoopRef。
NSRunLoop和CFRunLoopRef都代表著RunLoop對象;
NSRunLoop是基于CFRunLoopRef的一層OC包裝,所以要了解RunLoop內(nèi)部結(jié)構(gòu),需要多研究CFRunLoopRef層面的API(Core Foundation層面);
關(guān)于RunLoop的蘋果官方文檔
https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html
CFRunLoopRef的開源資料
http://opensource.apple.com/source/CF/CF-1151.16/

5.RunLoop與線程的關(guān)系
1)每條線程都有唯一的一個與之對應(yīng)的RunLoop對象;
2)主線程的RunLoop已經(jīng)自動創(chuàng)建好了,子線程的RunLoop需要主動創(chuàng)建;
3)RunLoop在第一次獲取時創(chuàng)建,在線程結(jié)束時銷毀;

6.兩套框架中獲得RunLoop對象的方式

//Foundation
[NSRunLoop currentRunLoop]; // 獲得當(dāng)前線程的RunLoop對象
[NSRunLoop mainRunLoop]; // 獲得主線程的RunLoop對象

//Core Foundation
CFRunLoopGetCurrent(); // 獲得當(dāng)前線程的RunLoop對象
CFRunLoopGetMain(); // 獲得主線程的RunLoop對象
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容