-
初識(shí)RunLoop
-
1.RunLoop的作用
-
A 保持程序的持續(xù)運(yùn)行(ios程序?yàn)槭裁茨芤恢被钪粫?huì)死)
-
B 處理App中的各種事件(觸摸、定時(shí)事件拴事、selector事件....)
-
C 節(jié)省CPU資源蒋伦,提高程序性能弓摘,有事件就處理事件,沒有就休息
-
2.RunLoop的重要說明痕届、重要說明韧献、重要說明
-
1. 如果沒有RunLoop,那么程序已啟動(dòng)就會(huì)退出研叫,什么事情都做不了
-
2. 如果沒有RunLoop锤窑,那么相當(dāng)于在內(nèi)部有一個(gè)死循環(huán),能夠保持程序持續(xù)運(yùn)行
-
3. main函數(shù)中的RunLoop
- 在UIAPPlication函數(shù)內(nèi)部就啟動(dòng)了一個(gè)RunLoop嚷炉,該函數(shù)返回一個(gè)int類型的值
- 這個(gè)默認(rèn)啟動(dòng)的RunLoop是跟主線程相關(guān)
-
3.RunLoop的API
-
1. 在iOS開發(fā)中有兩套api來訪問Runloop
- a.foundation框架【NSRunloop】
- b.core foundation框架【CFRunloopRef】
- #####2. NSRunLoop和CFRunLoopRef都代表著RunLoop對(duì)象,它們是等價(jià)的渊啰,可以互相轉(zhuǎn)換
- #####3. NSRunLoop是基于CFRunLoopRef的一層OC包裝,所以要了解RunLoop內(nèi)部結(jié)構(gòu)申屹,需要多研究CFRunLoopRef層面的API(Core Foundation層面)
-
4.RunLoop與線程
-
1.Runloop和線程的關(guān)系:一個(gè)Runloop對(duì)應(yīng)著一條唯一的線程
-
問題:如何讓子線程不死
-
回答:給這條子線程開啟一個(gè)Runloop
-
2.Runloop的創(chuàng)建:主線程Runloop已經(jīng)創(chuàng)建好了绘证,子線程的runloop需要手動(dòng)創(chuàng)建
-
3.Runloop的生命周期:在第一次獲取時(shí)創(chuàng)建,在線程結(jié)束時(shí)銷毀
-
5.獲取RunLoop
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
//獲得主線程對(duì)應(yīng)的runloop
NSRunLoop *mainRunLoop = [NSRunLoop mainRunLoop];
//獲取當(dāng)前線程對(duì)應(yīng)的runloop
NSRunLoop *currentRunLoop = [NSRunLoop currentRunLoop];
NSLog(@"%p---%p",mainRunLoop,currentRunLoop);
/**
Runloop和線程的關(guān)系
一一對(duì)應(yīng)的關(guān)系哗讥,主線程runloop已經(jīng)創(chuàng)建嚷那,但是子線程的需要手動(dòng)創(chuàng)建
*/
NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(runLoop) object:nil];
[thread start];
}
-(void)runLoop
{ //創(chuàng)建子線程對(duì)應(yīng)的runloop,currentRunLoop是懶加載的
NSLog(@"%@",[NSRunLoop currentRunLoop]);
NSLog(@"run---%@",[NSThread currentThread]);
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者