NSThread

什麼是進程?進程是指系統中正在運行的一個應用程序。
每個進程之間是獨立的,每個進程都運行在其專用並受保護的內存空間內。

什麼是線程?線程是進程的基本執行單元。一個進程想要執行任務必須得有線程。(一個進程最少得有一個線程)
一個線程中任務的執行是串行的。

什麼是多線程?一個進程中可以開啓多條線程,每條線程可以併發(同時)執行不同的任務。
多線程技術可以提高程序的執行效率。

多線程原理:一個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。
發佈了40 篇原創文章 · 獲贊 1 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章