ios開發,多線程簡介,ios多線程簡介
什麼是進程?
進程就是指,在系統中正在啟動並執行一個應用程式,比如同時開啟QQ,Xcode,系統就會分別啟動兩個進程、
什麼是線程?
一個進程要想執行任務,必須得有線程,線程是進程的基本執行單元,比如使用酷狗播放音樂、使用迅雷下載電影,都需要線上程中執行
線程的串列:一個線程中任務對的執行就是串列
如果要在一個線程中執行多個任務,那麼只能一個一個的按照順序執行這些任務,也就是說,在同一個時間內,一個線程只能執行一個任務
什麼是多線程?
一個進程中可以開啟多條線程,每條線程可以並發,執行不同的任務
比如:進程就相當於車間,線程就相當於車間工人,比如同時開啟三條線程,分別下載三個檔案(分別是檔案A、檔案B、檔案C)
多線程的原理:
同一個時間內,CPU只能處理一條線程,只有一條線程在工作或者執行
多線程並發執行,其實就是CPU快速的在多條線程之間調度和切換
如果CPU調度線程的時間足夠快,就造成了多線程並發執行的假象
如果線程非常非常多,會發生什麼情況呢?
CPU會在N多線程之間調度,CPU會累死,消耗大量的CPU資源
多線程的優點:1、能適當的提高程式的執行效率2、能適當的提高資源的利用率
多線程的缺點:開啟線程需要佔用一定的記憶體空間,如果開啟大量的線程,會佔用大量的記憶體空間,降低程式的效能
線程越多,CPU在調度線程上的開銷就越大
程式設計更加複雜:比如線程之間的通訊,多線程的資料共用
什麼是主線程?
一個ios程式運行後,預設會開啟一條線程,稱為“主線程”或者“UI線程”
主線程的主要作用:顯示、重新整理UI介面
多線程在ios開發中的做用,常用的多線程類與方法有什
#define kBgQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) //1
dispatch_async(kSystemAppUpdateQueue, ^{
NSError *error;
NSData* data = [NSData dataWithContentsOfURL:[NSURL URLWithString:strURL]
options:0
error:&error];
if (error!=nil) {
NSLog(@"%@",error.description);
[self performSelectorOnMainThread:selectorError withObject:nil waitUntilDone:YES];
}
else{
if (data!=nil)
{
[self performSelectorOnMainThread:selectorDone withObject:data waitUntilDone:YES];
}
else
{
[self performSelectorOnMainThread:selectorError withObject:nil waitUntilDone:YES];
}
}
});
return;
十個ios源及簡介
不管對於招聘和應聘來說,面試都是很重要的一個環節,特別對於開發人員來說,面試中的技術問題環節不僅是企業對應聘者技能和積累的考察,也是一個開發人員自我檢驗的好機會。對於iOS和Mac開發來說,因為本事還算比較新,企業對於這方面的開發人員需求也比較大,所以面試時的要求可能並不是很高,一般能知道一些Cocoa和OC的基本知識也就認為可以了。但是對於一個希望擁有技術力基礎的企業的iOS或者Mac開發來說,兩到三個頂尖的熟練技術人員,帶領一些還較為初級的開發人員,共同完成項目應該是比較常見的構成。
Cocoa特別是CocoaTouch的開發,上手可以說十分容易,但是背後隱藏的細節和原理卻很豐富。一方面對於基礎不夠熟練和清晰(比如從一個
AppDelegate開始用代碼構建ViewController,或者清晰地說明棧和堆之類的概念),另一方面對於更進階的開發知之甚少(比如多線程、網路非同步處理或者Core開頭的各種架構等等)。這些內容十分重要,但是可能現在一般的iOS開發人員或多或少都在這些問題上存在薄弱。在這裡我整理了一份面向於較高層級的iOS開發人員的面試題目的問題清單,列出了十個應聘Leader層級的進階Cocoa/CocoaTouch開發工程師所應該掌握和理解的技術。這份列表沒有提供標準答案,因為這些問題本身就沒有標準答案。隨每個人對這些內容的認識的不同和理解的差異,可以有不一樣的答案。但是最基本地,如果面對的是一名資深的Cocoa開發人員,至少期望能得到的答案都是“接觸過”,並且能結合自己的經驗說個七七八八,達到互相能明白意圖和方法的地步。能夠在其中兩三個領域有不錯的見解和具體的闡述的話,那是更好。這種對於知識覆蓋面和深度的考察很能真實反映出開發人員的技術水平。如果清單裡的很大部分內容都是完全沒接觸過和沒聽過的話,那可能距離資深Cocoa開發這樣一個階段還尚有距離了。
那麼,面試開始。
你使用過Objective-C的運行時編程(Runtime
Programming)麼?如果使用過,你用它做了什麼?你還能記得你所使用的相關的標頭檔或者某些方法的名稱嗎?
你實現過多線程的Core
Data麼?NSPersistentStoreCoordinator,NSManagedObjectContext和NSManagedObject中的哪些需要線上程中建立或者傳遞?你是用什麼樣的策略來實現的?
Core開頭的系列的內容。是否使用過CoreAnimation和CoreGraphics。UI架構和CA,CG架構的聯絡是什麼?分別用CA和CG做過些什麼動畫或者映像上的內容。(有需要的話還可以涉及Quartz的一些內容)
是否使用過CoreText或者CoreImage等?如果使用過,請談談你使用CoreText或者CoreImage的體驗。
NSNotification和KVO的區別和用法是什麼?什麼時候應該使用通知,什麼時候應該使用KVO,它們的實現上有什麼區別嗎?如果用
protocol和delegate(或者delegate的Array)來實作類別似的功能可能嗎?如果可能,會有什麼潛在的問題?如果不能,為什麼?(雖然protocol和delegate這種東西面試已經面爛了…)
你用過NSOperationQueue麼?如果用過或者瞭解的話,你為什麼要使用NSOperationQueue,實現了什麼?請描述它和GCD的區別和類似的地方(提示:可以從兩者的實現機制和適用範圍來描述)。
既然提到......餘下全文>>