IOS開發之多線程與GCD,ios多線程gcd
線程的執行 :
明顯可以看出,如果不開啟多線程的話,程式先走runA方法在走runB,然後再回到runA,再走runC ,A-->B-->C。
如果runA在載入網路請求(比如載入圖片),這樣的話就會阻塞主線程,也就是說先載入完圖片在走下面的方法,比如runC是一個點擊事件,圖片還沒載入出來的時候,點擊事件是不響應的,這需要什麼方法取解決呢?這就得開啟多線程了。
多線程的執行
開啟多線程之後在走runB的同時也在走runC,這樣就不會租塞主線程了。
多線程的基本概念:
1.每一個程式都有一個主線程,程式啟動是建立(調用main函數來建立)。
2.主線程的生命週期是和應用程式綁定的,程式退出,主線程也就停止了。
3.多線程技術表示,一個應用程式有多個線程,使用多線程能提供CPU的使用率,防止主線程阻塞。
4.任何有可能阻塞主線程的任務不要在主線程中執行(比如執行網路)。
多線程使用的注意
1.線程使用不是無節制的,iso中的主線程的堆棧大小是1M,從第二個線程開始是512KB,這些數值不能通過編譯器開關或線程API函數更改。
2.只有主線程有直接修改UI的能力(比如要設定image,得先回到主線程中設定)。
子線程的記憶體管理:需要加入自動釋放池中
IOS中的三種多線程技術
1.pthread是POISIX線程的API,是C語言的技術,可以直接操作線程。
2.NSThread是每個NSThread對象對應一個線程,量級較輕,是對pthread的抽象。
3.GCD(Grand Central Dispatch)是基於C語言的架構,使用隊列管理線程,可以充分利用多核。
4.NSOperation/NSOperationQueue是物件導向的線程技術,是對GCD的抽象。
三種多線程的技術對比
一:NSThread
1.優點:NSThread比其他兩個輕量級,使用簡單。
2.缺點:需要自己管理線程的生命週期、線程同步、加鎖、睡眠以及喚醒,線程的同步對線程的加鎖會有一定的系統開銷。
二:NSOperation
1.不需要關心線程管理,資料同步的事情,可以把精力放在自己需要操作的執行上
2.NSOperation是物件導向的
三:GCD
1.是由蘋果開發的一個多核編程的解決方案,ios4.0後才可以用,是替代以上兩種的進階和強大的技術。
2.是基於C語言的