什麼是進程?進程是指系統中正在運行的一個應用程序。
每個進程之間是獨立的,每個進程都運行在其專用並受保護的內存空間內。
什麼是線程?線程是進程的基本執行單元。一個進程想要執行任務必須得有線程。(一個進程最少得有一個線程)
一個線程中任務的執行是串行的。
什麼是多線程?一個進程中可以開啓多條線程,每條線程可以併發(同時)執行不同的任務。
多線程技術可以提高程序的執行效率。
多線程原理:一個CPU同一時間只能處理一條線程,多線程併發執行,其實是CPU快速的(納秒級)在多條線程之間調度(切換)。
多線程優點:提高程序執行效率和資源利用率。
多線程缺點:開啓大量的線程會佔用大量的內存(一條512KB),還會使程序設計更加複雜。
主線程:一個IOS程序運行後,會默認開啓一條線程(主線程)。
主要作用:顯示/刷新UI界面,處理事件。
切勿將比較耗時的操作放到主線程中,會給用戶一種卡的感覺。
一:基本使用
1,如何創建NSThread?
一個NSThread對象就代表一條線程。
(1)alloc init
(2)detachNewThreadSelector 會立即在後臺線程執行selector方法
(3)performSelectorInBackground隱式的多線程方法
2,如何獲取當前線程?
二:線程狀態
1,啓動線程 start
2,阻塞線程
3,停止線程
在內存中銷燬。
4,NSThread的屬性及優先級的設定
兩個屬性:name(線程名),
threadPriority(優先級:0~1.0,1代表優先級最高)
三:資源搶奪
1,多線程的安全隱患問題:
當多個線程可以訪問同一資源,很容易引發數據錯亂和數據安全問題
如何解決:
互斥鎖 @synchronized (鎖對象) { //需要鎖定的代碼 }
鎖對象一定要是多個線程能共享的對象,大多都用self;
互斥鎖優點:能有效解決因多線程同時搶奪同一資源而產生的安全問題。
互斥鎖缺點:需要消耗大量CPU資源。
2,原子和非原子屬性 atomic / nonatomic
nonatomic:非原子屬性
atomic:原子屬性(線程安全),針對多線程設計的,是默認屬性。當多個線程寫入屬性時,保證同一時間只有一個線程執行操作。
實際上,原子屬性內部也有一把鎖,自旋鎖
自旋鎖&
互斥鎖
-共同點
都能夠保證同一時間,只有一條線程執行鎖定範圍的代碼
-不同點
互斥鎖:如果發現有其他線程正在執行鎖定的代碼,線程會進入休眠狀態,等待其他線程執行完畢,打開鎖之後,線程會被喚醒
自旋鎖:如果發現有其他線程正在執行鎖定的代碼,線程會用死循環的方式,一直等待鎖定代碼執行完成!
自旋鎖更適合執行非常短的代碼!
-無論什麼鎖,都是要付出代價的!
四,加載網絡圖片
線程間通訊:
PS:定時器若干
*********************weak在ARC/MRC***********************
MRC的內存分配原則:誰申請,誰釋放
ARC :在執行的時候,自動添加 retain/release/autorelease
在ARC中,擁有weak屬性,如果沒有被其他對象強引用,會被立即銷燬。
在MRC中,不允許使用weak,應該使用assign。