-
初識RunLoop
-
1.RunLoop的作用
-
A 保持程序的持續(xù)運行(ios程序為什么能一直活著不會死)
-
B 處理App中的各種事件(觸摸、定時事件、selector事件....)
-
C 節(jié)省CPU資源,提高程序性能,有事件就處理事件,沒有就休息
-
2.RunLoop的重要說明、重要說明、重要說明
-
1. 如果沒有RunLoop,那么程序已啟動就會退出,什么事情都做不了
-
2. 如果沒有RunLoop,那么相當(dāng)于在內(nèi)部有一個死循環(huán),能夠保持程序持續(xù)運行
-
3. main函數(shù)中的RunLoop
- 在UIAPPlication函數(shù)內(nèi)部就啟動了一個RunLoop,該函數(shù)返回一個int類型的值
- 這個默認啟動的RunLoop是跟主線程相關(guān)
-
3.RunLoop的API
-
1. 在iOS開發(fā)中有兩套api來訪問Runloop
- a.foundation框架【NSRunloop】
- b.core foundation框架【CFRunloopRef】
- #####2. NSRunLoop和CFRunLoopRef都代表著RunLoop對象,它們是等價的,可以互相轉(zhuǎn)換
- #####3. NSRunLoop是基于CFRunLoopRef的一層OC包裝,所以要了解RunLoop內(nèi)部結(jié)構(gòu),需要多研究CFRunLoopRef層面的API(Core Foundation層面)
-
4.RunLoop與線程
-
1.Runloop和線程的關(guān)系:一個Runloop對應(yīng)著一條唯一的線程
-
問題:如何讓子線程不死
-
回答:給這條子線程開啟一個Runloop
-
2.Runloop的創(chuàng)建:主線程Runloop已經(jīng)創(chuàng)建好了,子線程的runloop需要手動創(chuàng)建
-
3.Runloop的生命周期:在第一次獲取時創(chuàng)建,在線程結(jié)束時銷毀
-
5.獲取RunLoop
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
//獲得主線程對應(yīng)的runloop
NSRunLoop *mainRunLoop = [NSRunLoop mainRunLoop];
//獲取當(dāng)前線程對應(yīng)的runloop
NSRunLoop *currentRunLoop = [NSRunLoop currentRunLoop];
NSLog(@"%p---%p",mainRunLoop,currentRunLoop);
/**
Runloop和線程的關(guān)系
一一對應(yīng)的關(guān)系,主線程runloop已經(jīng)創(chuàng)建,但是子線程的需要手動創(chuàng)建
*/
NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(runLoop) object:nil];
[thread start];
}
-(void)runLoop
{ //創(chuàng)建子線程對應(yīng)的runloop,currentRunLoop是懶加載的
NSLog(@"%@",[NSRunLoop currentRunLoop]);
NSLog(@"run---%@",[NSThread currentThread]);
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。