文檔翻譯-NSThread

蘋(píng)果官方文檔Thread-Foundation

一個(gè)NSThread對(duì)象可以操縱一條線程. 你可以使用這個(gè)類(lèi)來(lái)讓你的OC方法運(yùn)行在自己的線程中. 當(dāng)你想要執(zhí)行一個(gè)漫長(zhǎng)的任務(wù)但不希望阻塞運(yùn)行在主線程的其他應(yīng)用時(shí), 使用線程就特別有效. 特別地, 你可以使用線程去避免阻塞應(yīng)用的主線程同時(shí)能夠處理用戶(hù)接口和動(dòng)作有關(guān)的事件. 線程也可以用來(lái)將一個(gè)龐大的任務(wù)劃分成幾個(gè)小任務(wù), 這能提升多核計(jì)算機(jī)的性能.

在OS X v10.5以前, 你只能通過(guò)detachNewThreadSelector:toTarget:withObject:方法去開(kāi)啟一條新的線程. 在OS X v10.5及之后, 你可以創(chuàng)建一個(gè)NSThread對(duì)象并且使用start方法來(lái)啟動(dòng)它.

在OS X v10.5, NSThread和NSOperation一樣可以監(jiān)控線程的運(yùn)行時(shí)狀態(tài). 你可以使用同樣的邏輯去取消線程的執(zhí)行或者判斷線程是否仍正在執(zhí)行或已經(jīng)完成了任務(wù). 取消一條線程需要線程代碼的支持, 可以在cancel方法的描述中得到更詳細(xì)的信息.

Subclassing Notes

在OS X v10.5及之后, 你可以繼承NSThread并且重寫(xiě)main方法去實(shí)現(xiàn)你的線程的主入口. 只要你重寫(xiě)了main方法, 你可以直接調(diào)用[super main]而沒(méi)必要重新調(diào)用它的繼承行為.

Initializing an NSThread Object

  • init

返回一個(gè)經(jīng)初始化的NSThread對(duì)象
init() // swift
-(instancetype)init // objc

  • initWithTarget:selector:object:

返回一個(gè)給定參數(shù)的經(jīng)初始化的對(duì)象
參數(shù) :

  • target : 方法接收者
  • selector : 發(fā)送給target的方法的選擇器. 這個(gè)選擇器必須只接收一個(gè)參數(shù)和沒(méi)有返回值
  • argument : 傳遞給target的單一參數(shù). 可以為nil.

說(shuō)明 :
target和argument對(duì)象在分離的線程的執(zhí)行期間將會(huì)被retain. 當(dāng)線程退出的時(shí)候就會(huì)release.

Starting a Thread

  • detachNewThreadSelector:toTarget:withObject:

使用特定選擇器作為線程入口點(diǎn)來(lái)分離一個(gè)新的線程
參數(shù) :

  • aSelector : 發(fā)送給target的方法的選擇器. 這個(gè)選擇器必須只接收一個(gè)參數(shù)和沒(méi)有返回值
  • aTarget : 將會(huì)在新線程中收到aSelector消息的對(duì)象
  • anArgument : 傳遞給target的單一參數(shù), 可以為nil

說(shuō)明 :
target和argument對(duì)象在分離的線程的執(zhí)行期間將會(huì)被retain. 當(dāng)線程退出的時(shí)候就會(huì)release. 當(dāng)target執(zhí)行完aSelector發(fā)送的消息時(shí), 線程便會(huì)退出.
如果這個(gè)線程是應(yīng)用分離的第一個(gè)線程, 這個(gè)方法將會(huì)post一條NSWillBecomeMultiThreadedNotification消息給默認(rèn)通知中心.

  • start

說(shuō)明 :
在新線程中調(diào)用對(duì)象的main方法. 如果對(duì)象已經(jīng)初始化了target和selector, 則默認(rèn)的main方法會(huì)自動(dòng)調(diào)用selector.
如果這個(gè)線程是應(yīng)用分離的第一個(gè)線程, 這個(gè)方法將會(huì)post一條NSWillBecomeMultiThreadedNotification消息給默認(rèn)通知中心.

Stopping a Thread

  • sleepUntilDate : 在特定的事件阻塞當(dāng)前線程
  • sleepForTimeInterval :

以上兩個(gè)方法, 當(dāng)線程被阻塞時(shí)不存在運(yùn)行循環(huán)處理

  • exit

結(jié)束當(dāng)前線程
說(shuō)明 :
這個(gè)方法使用currentThread這個(gè)類(lèi)方法來(lái)訪問(wèn)當(dāng)前線程. 在退出線程以前, 該方法會(huì)發(fā)送一個(gè) NSThreadWillExitNotification 消息, 帶上這個(gè)線程對(duì)象 給通知中心. 因?yàn)橄⒌膫魉褪峭竭M(jìn)行的, 所以所以監(jiān)聽(tīng)者都能在線程結(jié)束前監(jiān)聽(tīng)到這個(gè)信息.
應(yīng)該避免調(diào)用這個(gè)方法, 因?yàn)樗⒉唤o機(jī)會(huì)你的線程去清理在線程運(yùn)行期間分配的資源.

  • cancel

改變線程的cancelled屬性的狀態(tài), 并且表示這個(gè)線程應(yīng)該要退出了
說(shuō)明 :
這個(gè)方法的語(yǔ)義跟NSOperation中使用的一樣. 這個(gè)方法設(shè)置線程對(duì)象的狀態(tài)信息并且映射到isCancelled方法上. 線程會(huì)定期地調(diào)用isCancelled方法來(lái)確認(rèn)自己是不是應(yīng)該要取消了, 如果是, 則準(zhǔn)備退出線程.

Determining the Thread's Execution State

executing Property
布爾值, 表示線程是否正在執(zhí)行中(只讀屬性)
finished Property
布爾值, 表示線程是否已經(jīng)完成執(zhí)行(只讀屬性)
cancelled Property
布爾值, 表示線程是否以已經(jīng)被取消(只讀屬性)

Working with the Main Thread

  • isMainThread 和 isMainThread Property

isMainThread : 返回一個(gè)布爾值表示當(dāng)前線程是否是主線程
isMainThread Property : 布爾值, 表示當(dāng)前線程是否是主線程(只讀屬性)

  • mainThread

返回一個(gè)主線程對(duì)象(NSThread)

Querying the Environment

  • isMultiThreaded

返回一個(gè)布爾值表示應(yīng)用是否處于多線程狀態(tài)
說(shuō)明 :
一個(gè)應(yīng)用中如果一個(gè)分離的線程在主線程中調(diào)用了detachNewThreadSelector:toTarget:withObject: 或者 start 方法就被認(rèn)為是處于多線程狀態(tài). 但是如果你使用non-Cocoa API, 比如 POSIX 或者 Multiprocessing Services APIs 去分離一個(gè)線程, 這個(gè)方法的返回結(jié)果依舊為NO. 應(yīng)用處于多線程狀態(tài)并不代表新線程正處于運(yùn)行狀態(tài), 僅僅代表有新的線程被創(chuàng)建了而已.

  • currentThread

返回當(dāng)前線程對(duì)象

  • callStackReturnAddresses

返回裝著調(diào)用棧返回地址的數(shù)組, 里面每一個(gè)元素都是包含著NSUInteger值的NSNumber對(duì)象

  • callStackSymbols

返回裝著調(diào)用棧標(biāo)志的數(shù)組, 每一個(gè)元素都是NSString對(duì)象
說(shuō)明 :
返回值描述的是方法當(dāng)前線程的調(diào)用椝耪溃回溯

Working with Thread Properties

threadDictionary
name
stackSize

Working with Thread Priorities

  • threadPriority
    threadPriority
    setThreadPriority

Notifications

NSDidBecomeSingleThreadedNotification
NSThreadWillExitNotification
NSWillBecomeMultiThreadedNotification

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末慈迈,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子戳吝,更是在濱河造成了極大的恐慌浩销,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件听哭,死亡現(xiàn)場(chǎng)離奇詭異慢洋,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)陆盘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)普筹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人隘马,你說(shuō)我怎么就攤上這事太防。” “怎么了酸员?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵蜒车,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我幔嗦,道長(zhǎng)醇王,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任崭添,我火速辦了婚禮寓娩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己棘伴,他們只是感情好寞埠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著焊夸,像睡著了一般仁连。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上阱穗,一...
    開(kāi)封第一講書(shū)人閱讀 51,631評(píng)論 1 305
  • 那天饭冬,我揣著相機(jī)與錄音,去河邊找鬼揪阶。 笑死昌抠,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鲁僚。 我是一名探鬼主播炊苫,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼冰沙!你這毒婦竟也來(lái)了侨艾?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤拓挥,失蹤者是張志新(化名)和其女友劉穎唠梨,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體侥啤,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡姻成,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了愿棋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片科展。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖糠雨,靈堂內(nèi)的尸體忽然破棺而出才睹,到底是詐尸還是另有隱情,我是刑警寧澤甘邀,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布琅攘,位于F島的核電站,受9級(jí)特大地震影響松邪,放射性物質(zhì)發(fā)生泄漏坞琴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一逗抑、第九天 我趴在偏房一處隱蔽的房頂上張望剧辐。 院中可真熱鬧寒亥,春花似錦、人聲如沸荧关。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)忍啤。三九已至加勤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間同波,已是汗流浹背鳄梅。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留未檩,地道東北人戴尸。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像讹挎,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子吆玖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理筒溃,服務(wù)發(fā)現(xiàn),斷路器沾乘,智...
    卡卡羅2017閱讀 134,659評(píng)論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法怜奖,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法翅阵,繼承相關(guān)的語(yǔ)法歪玲,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,639評(píng)論 18 399
  • 一掷匠、前言 上一篇文章iOS多線程淺匯-原理篇中整理了一些有關(guān)多線程的基本概念滥崩。本篇博文介紹的是iOS中常用的幾個(gè)多...
    nuclear閱讀 2,050評(píng)論 6 18
  • 原文地址 http://www.cnblogs.com/kenshincui/p/3983982.html 大家都...
    怎樣m閱讀 1,269評(píng)論 0 1
  • 我只是想要一個(gè)擁抱,你卻總是跟我講道理讹语。
    ADZUKI至沉閱讀 160評(píng)論 3 0