iOS中多線程原理與runloop介紹


http://mobile.51cto.com/iphone-403490.htm

iOS中多線程原理與runloop介紹

iPhone中的線程應用並不是無節制的,官方給出的資料顯示iPhone OS下的主線程的堆棧大小是1M,第二個線程開始都是512KB。並且該值不能通過編譯器開關或線程API函數來更改。只有主線程有直接修改UI的能力。……>>詳細

 

 

iOS多線程編程知多少

在iOS的世界里有兩種實現多線程的方式:

多線程是一個比較輕量級的方法來實現單個應用程序內多個代碼執行路徑。在系統級別內,程序並排執行,系統分配到每個程序的執行時間是基於該程序的所需時間和其他程序的所需時間來決定的。然而在每個應程序的內部,存在一個或多個執行線程,它同時或在一個幾乎同時發生的方式里執行不同的任務。

第一種:GCD

閱讀全文

GCD使用攻略

什么是GCD

Grand Central Dispatch (GCD)是Apple開發的一個多核編程的解決方法。該方法在Mac OS X 10.6雪豹中首次推出,並隨后被引入到了iOS4.0中。GCD是一個替代諸如NSThread, NSOperationQueue, NSInvocationOperation等技術的很高效和強大的技術,它看起來象就其它語言的閉包(Closure)一樣,但蘋果把它叫做blocks。

 

應用舉例

讓我們來看一個編程場景。我們要在iphone上做一個下載網頁的功能,該功能非常簡單,就是在iphone上放置一個按鈕,點擊該按鈕時,顯示一個轉動的圓圈,表示正在進行下載,下載完成之后,將內容加載到界面上的一個文本控件中。

閱讀全文

GCD介紹(一):基本概念和Dispatch Queue

什么是GCD?

Grand Central Dispatch或者GCD,是一套低層API,提供了一種新的方法來進行並發程序編寫。從基本功能上講,GCD有點像NSOperationQueue,他們都允許程序將任務切分為多個單一任務然后提交至工作隊列來並發地或者串行地執行。GCD比之NSOpertionQueue更底層更高效,並且它不是Cocoa框架的一部分。

除了代碼的平行執行能力,GCD還提供高度集成的事件控制系統。可以設置句柄來響應文件描述符、mach ports(Mach port 用於 OS X上的進程間通訊)、進程、計時器、信號、用戶生成事件。這些句柄通過GCD來並發執行。

閱讀全文

GCD介紹(二):多核心的性能

概念

為了在單一進程中充分發揮多核的優勢,我們有必要使用多線程技術(我們沒必要去提多進程,這玩意兒和GCD沒關系)。在低層,GCD全局dispatch queue僅僅是工作線程池的抽象。這些隊列中的Block一旦可用,就會被dispatch到工作線程中。提交至用戶隊列的Block最終也會通過全局隊列進入相同的工作線程池(除非你的用戶隊列的目標是主線程,但是為了提高運行速度,我們絕不會這么干)。

有兩種途徑來通過GCD“榨取”多核心系統的性能:將單一任務或者一組相關任務並發至全局隊列中運算;將多個不相關的任務或者關聯不緊密的任務並發至用戶隊列中運算;

閱讀全文

GCD介紹(三):Dispatch Sources

何為Dispatch Sources

簡單來說,dispatch source是一個監視某些類型事件的對象。當這些事件發生時,它自動將一個block放入一個dispatch queue的執行例程中。

說的貌似有點不清不楚。我們到底討論哪些事件類型?

閱讀全文

GCD介紹(四):完結

Dispatch Queue掛起

dispatch queue可以被掛起和恢復。使用 dispatch_suspend函數來掛起,使用  dispatch_resume 函數來恢復。這兩個函數的行為是如你所願的。另外,這兩個函數也可以用於dispatch source。

一個要注意的地方是,dispatch queue的掛起是block粒度的。換句話說,掛起一個queue並不會將當前正在執行的block掛起。它會允許當前執行的block執行完畢,然后后續的block不再會被執行,直至queue被恢復。

閱讀全文

GCD實戰一:使用串行隊列實現簡單的預加載

本文為大家介紹了如何使用串行隊列實現簡單的預加載,思路是使用gcd創建串行隊列,然后在此隊列中先后執行兩個任務:1.預加載一個viewController 2.將這個viewController推入。文章最后提供了源碼下載,希望對各位有所幫助。

其主要思路是使用gcd創建串行隊列,然后在此隊列中先后執行兩個任務:1.預加載一個viewController 2.將這個viewController推入

代碼如下:

閱讀全文

GCD實戰二:資源競爭

概述

我將分四步來帶大家研究研究程序的並發計算。第一步是基本的串行程序,然后使用GCD把它並行計算化。如果你想順着步驟來嘗試這些程序的話,可以下載源碼。注意,別運行imagegcd2.m,這是個反面教材。

源碼下載:http://down.51cto.com/data/872222

閱讀全文

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中的多線程編程。

一、線程創建與啟動

線程創建主要有二種方式:

  1. - (id)init; // designated initializer  
  2. - (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相媲美。

一、線程創建與啟動

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com