標籤:
http://mobile.51cto.com/iphone-403490.htm
iOS中多線程原理與runloop介紹
iPhone中的線程應用並不是無節制的,官方給出的資料顯示iPhone OS下的主線程的堆棧大小是1M,第二個線程開始都是512KB。並且該值不能通過編譯器開關或線程API函數來更改。只有主線程有直接修改UI的能力。……>>詳細
兄弟專題:iOS人機互動指南之UI設計基礎
1 iOS多線程編程知多少
在iOS的世界裡有兩種實現多線程的方式:
多線程是一個比較輕量級的方法來實現單個應用程式內多個代碼執行路徑。在系統層級內,程式並排執行,系統分配到每個程式的執行時間是基於該程式的所需時間和其他程式的所需時間來決定的。然而在每個應程式的內部,存在一個或多個執行線程,它同時或在一個幾乎同時發生的方式裡執行不同的任務。
第一種:GCD
閱讀全文
2 GCD使用攻略
什麼是GCD
Grand Central Dispatch (GCD)是Apple開發的一個多核編程的解決方案。該方法在Mac OS X 10.6雪豹中首次推出,並隨後被引入到了iOS4.0中。GCD是一個替代諸如NSThread, NSOperationQueue, NSInvocationOperation等技術的很高效和強大的技術,它看起來象就其它語言的閉包(Closure)一樣,但蘋果把它叫做blocks。
應用舉例
讓我們來看一個編程情境。我們要在iphone上做一個下載網頁的功能,該功能非常簡單,就是在iphone上放置一個按鈕,點擊該按鈕時,顯示一個轉動的圓圈,表示進行中下載,下載完成之後,將內容載入到介面上的一個文本控制項中。
閱讀全文
3 GCD介紹(一):基本概念和Dispatch Queue
什麼是GCD?
Grand Central Dispatch或者GCD,是一套低層API,提供了一種新的方法來進行並發程式編寫。從準系統上講,GCD有點像NSOperationQueue,他們都允許程式將任務切分為多個單一任務然後提交至工作隊列來並發地或者串列地執行。GCD比之NSOpertionQueue更底層更高效,並且它不是Cocoa架構的一部分。
除了代碼的平行執行能力,GCD還提供高度整合的事件控制系統。可以設定控制代碼來回應檔描述符、mach ports(Mach port 用於 OS X上的進程間通訊)、進程、計時器、訊號、使用者建置事件。這些控制代碼通過GCD來並發執行。
閱讀全文
4 GCD介紹(二):多核心的效能
概念
為了在單一進程中充分發揮多核的優勢,我們有必要使用多線程技術(我們沒必要去提多進程,這玩意兒和GCD沒關係)。在低層,GCD全域dispatch queue僅僅是背景工作執行緒池的抽象。這些隊列中的Block一旦可用,就會被dispatch到背景工作執行緒中。提交至使用者隊列的Block最終也會通過全域隊列進入相同的背景工作執行緒池(除非你的使用者隊列的目標是主線程,但是為了提高運行速度,我們絕不會這麼幹)。
有兩種途徑來通過GCD“榨取”多核心系統的效能:將單一任務或者一組相關任務並發至全域隊列中運算;將多個不相關的任務或者關聯不緊密的任務並發至使用者隊列中運算;
閱讀全文
5 GCD介紹(三):Dispatch Sources
何為Dispatch Sources
簡單來說,dispatch source是一個監視某些類型事件的對象。當這些事件發生時,它自動將一個block放入一個dispatch queue的執行常式中。
說的貌似有點不清不楚。我們到底討論哪些事件類型?
閱讀全文
6 GCD介紹(四):完結
Dispatch Queue掛起
dispatch queue可以被掛起和恢複。使用 dispatch_suspend函數來掛起,使用 dispatch_resume 函數來恢複。這兩個函數的行為是如你所願的。另外,這兩個函數也可以用於dispatch source。
一個要注意的地方是,dispatch queue的掛起是block粒度的。換句話說,掛起一個queue並不會將當前正在執行的block掛起。它會允許當前執行的block執行完畢,然後後續的block不再會被執行,直至queue被恢複。
閱讀全文
7 GCD實戰一:使用串列隊列實現簡單的預先載入
本文為大家介紹了如何使用串列隊列實現簡單的預先載入,思路是使用gcd建立串列隊列,然後在此隊列中先後執行兩個任務:1.預先載入一個viewController 2.將這個viewController推入。文章最後提供了源碼下載,希望對各位有所協助。
其主要思路是使用gcd建立串列隊列,然後在此隊列中先後執行兩個任務:1.預先載入一個viewController 2.將這個viewController推入
代碼如下:
閱讀全文
8 GCD實戰二:資源競爭
概述
我將分四步來帶大家研究研究程式的並發計算。第一步是基本的串列程式,然後使用GCD把它並行計算化。如果你想順著步驟來嘗試這些程式的話,可以下載源碼。注意,別運行imagegcd2.m,這是個反面教材。
源碼下載:http://down.51cto.com/data/872222
閱讀全文
9 iOS多線程初體驗
iOS多線程初體驗是本文要介紹的內容,iPhone中的線程應用並不是無節制的,官方給出的資料顯示iPhone OS下的主線程的堆棧大小是1M,第二個線程開始都是512KB。並且該值不能通過編譯器開關或線程API函數來更改。只有主線程有直接修改UI的能力。
一、 NSOperation和NSOperationQueue
1、一個繼承自 NSOperation的操作類,該類的實現中必須有 - (void)main方法的。
2、使用NSOperation的最簡單方法就是將其放入NSOperationQueue中。
閱讀全文
10 iPhone多線程編程初體驗
找了很長時間IPhone下多線程的編程的內容, 用到的類是UIKit的中NSThread.。
在google過程中,發現很多文都驚喜地標題著類似< 多線程的OS4來了>, 這些想正向引導一下, 0S4的亮點在於多任務,一個任務為一個進程,也叫多進程, 而多線程在早期的IPHONEOS上都是有的.
IPHONE OS中任務的概念是一個應用, 在一個時間你只能做一件事情, 即不能同時玩遊戲,同時上QQ. 而多任務的時候是可以這麼做的.
流程大概如下:
閱讀全文
11 剖析iPhone多線程
iPhone多線程是本文要介紹的內容,多線程在各種程式設計語言中都是痛點,很多語言中實現起來很麻煩,objective-c雖然源於c,但其多線程編程卻相當簡單,可以與java相媲美。這篇文章主要從線程建立與啟動、線程的同步與鎖、線程的互動、線程池等等四個方面簡單的講解一下iphone中的多線程編程。
一、線程建立與啟動
線程建立主要有二種方式:
- - (id)init; // designated initializer
- - (id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument;
當然,還有一種比較特殊,就是使用所謂的convenient method,這個方法可以直接產生一個線程並啟動它,而且無需為線程的清理負責。這個方法的介面是:
閱讀全文
12 iPhone開發多線程使用與注意事項
iPhone開發多線程使用與注意事項是本文要介紹的內容,主要介紹一下iPhone SDK中多線程的使用方法以及注意事項。雖然現在大部分PC應用程式都支援多線程/多任務的開發方式,但是在iPhone上,Apple並不推薦使用多線程的編程方式。
但是多線程編程畢竟是發展的趨勢,而且據說即將推出的iPhone OS4將全面支援多線程的處理方式。所以說掌握多線程的編程方式,在某些場合一定能挖掘出iPhone的更大潛力。
從例子入手
先從一個常式入手,具體的代碼參考了這裡。還有常式可以下載。
閱讀全文
13 iPhone SDK 多線程使用方法以及注意事項
iPhone SDK 多線程使用方法以及注意事項是本文要介紹的內容,不多說,直接進入話題。雖然現在大部分PC應用程式都支援多線程/多任務的開發方式,但是在iPhone上,Apple並不推薦使用多線程的編程方式。但是多線程編程畢竟是發展的趨勢,而且據說即將推出的iPhone OS4將全
雖然現在大部分PC應用程式都支援多線程/多任務的開發方式,但是在iPhone上,Apple並不推薦使用多線程的編程方式。但是多線程編程畢竟是發展的趨勢,而且據說即將推出的iPhone OS4將全面支援多線程的處理方式。所以說掌握多線程的編程方式,在某些場合一定能挖掘出iPhone的更大潛力
從例子入手
先從一個常式入手,具體的代碼參考了這裡。還有常式可以下載。多線程程式的控制模型可以參考這裡,一般情況下都是使用 管理者/工人模型, 這裡,我們使用iPhone SDK中的 NSThread 來實現它。
首先建立一個新的 View-based application 工程,名字為 "TutorialProject" 。介面如所示,使用UILabel實現兩部分的Part(Thread Part和Test Part),Thread Part中包含一個UIProgressView和一個UIButton;而Test Part包含一個值和一個UISlider。
閱讀全文
14 SQLite在多線程環境下的應用
先說下初衷吧,實際上我經常看到有人抱怨SQLite不支援多線程。而在iOS開發時,為了不阻塞主線程,資料庫訪問必須移到子線程中。為瞭解決這個矛盾,很有必要對此一探究竟。
關於這個問題,最權威的解答當然是SQLite官網上的“Is SQLite threadsafe?”這個問答。
簡單來說,從3.3.1版本開始,它就是安全執行緒的了。而iOS的SQLite版本沒有低於這個版本的:
3.4.0 - iPhone OS 2.2.1
閱讀全文
15 關於iPhone多線程編程的教程
iPhone多線程編程的教程是本文要介紹的內容,相信大家也都接觸過多線程的使用,那麼本文也可以作為一個參考來進行學習。不多說,我們來看內容中詳細講解多線程編程。
iphone中多線程編程:線程的建立
多線程在各種程式設計語言中都是痛點,很多語言中實現起來很麻煩,objective-c雖然源於c,但其多線程編程卻相當簡單,可以與java相媲美。
一、線程建立與啟動
iOS中多線程原理與runloop介紹