小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

iOS多線程pthread與NSTread

 最初九月雪 2016-02-21

               

 

  本文主要是講述iOS多線程pthread與NSTread,更多IOS技術(shù)知識(shí),請登陸瘋狂軟件教育官網(wǎng)。

  簡介

  恰當(dāng)?shù)氖褂枚嗑€程編程可以提供任務(wù)的執(zhí)行效率和系統(tǒng)資源的利用率

  多線程是為了提高資源利用率,和應(yīng)用程序的響應(yīng)速度,多個(gè)線程共享應(yīng)用資源

  每個(gè)應(yīng)用程序都有一個(gè)主線程,通常用來做UI界面刷新等

  比較耗時(shí)的任務(wù)如果放在主線程中,可能會(huì)造成主線程的堵塞,無法響應(yīng)用戶操作,通常為耗時(shí)任務(wù)創(chuàng)建自己的線程,與主線程并發(fā)執(zhí)行

  多線程編程在一定程度上提高了系統(tǒng)資源的利用率和任務(wù)處理速度,但是線程不易過多,否則會(huì)引發(fā)以下問題。

  過多的線程會(huì)造成處理機(jī)的頻繁調(diào)度,線程調(diào)度需要消耗大量的系統(tǒng)資源。

  同一進(jìn)程下的多個(gè)線程共享進(jìn)程的資源,多個(gè)線程對資源的訪問需要實(shí)現(xiàn)同步,若線程過多會(huì)增加同步的難度,甚至無法實(shí)現(xiàn)。

  iOS開發(fā)中實(shí)現(xiàn)多線程的方式

  pthread

  跨平臺(tái),適用于多種操作系統(tǒng),可移植性強(qiáng)

  是一套純C語言的通用API,且線程的生命周期需要程序員自己管理,使用難度較大,通常不使用

  NSThread

  基于OC語言的API,使得其簡單易用,面向?qū)ο蟛僮?/p>

  線程的聲明周期由程序員管理,偶爾使用

  GCD

  基于C語言的API,充分利用設(shè)備的多核,旨在替換NSThread等線程技術(shù)

  線程的生命周期,由系統(tǒng)自動(dòng)管理,經(jīng)常使用

  NSOperation

  基于OC語言API,底層是GCD,增加了一些更加簡單易用的功能,使用更加面向?qū)ο?/p>

  線程生命周期由系統(tǒng)自動(dòng)管理,經(jīng)常使用

  pthread

  創(chuàng)建線程

  定義線程變量:

  pthread_t thread

  初始化線程變量:

  pthread_create(&thread, NULL, run, NULL)

  設(shè)置/獲取線程的并發(fā)執(zhí)行數(shù)

  設(shè)置并發(fā)執(zhí)行數(shù):

  int pthread_setconcurrency(int)

  獲取線程的并發(fā)執(zhí)行數(shù):

  int pthread_getconcurrency(void)

  執(zhí)行單次任務(wù)(通常用來設(shè)計(jì)單例模式)

  定義標(biāo)記:

  pthread_once_t onceToken

  執(zhí)行單次任務(wù):

  int pthread_once(pthread_once_t *, void (*)(void))

  將線程狀態(tài)轉(zhuǎn)化為unjoinable狀態(tài),確保資源的釋放

  int pthread_detach(pthread_t)

  退出線程

  void pthread_exit(void *)

  NSThread

  線程的生命周期操作

  創(chuàng)建線程的方法

  - (instancetype)initWithTarget:(id)target selector:(SEL)selector object:(id)argument,此方法創(chuàng)建

  的線程需要手動(dòng)啟動(dòng)

  + (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(id)argument,創(chuàng)建線

  程后自動(dòng)啟動(dòng)

  - (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg,隱式創(chuàng)建線程并啟動(dòng)

  配置線程

  通過name屬性設(shè)置線程名字

  + (BOOL)setThreadPriority:(double)p設(shè)置線程的優(yōu)先級(jí)

  啟動(dòng)線程

  - (void)start

  阻塞線程

  + (void)sleepUntilDate:(NSDate *)date

  + (void)sleepForTimeInterval:(NSTimeInterval)ti

  取消線程

  - (void)cancel,當(dāng)前正在執(zhí)行的線程不會(huì)立刻停止

  強(qiáng)制退出線程

  + (void)exit

  NSThread的其他操作

  與主線程相關(guān)

  + (NSThread *)mainThread,獲取主線程

  + (BOOL)isMainThread,判斷當(dāng)前線程是不是主線程

  與當(dāng)前線程相關(guān)

  + (NSThread *)currentThread,獲取當(dāng)前線程

  判斷線程的狀態(tài)

  \通過executing屬性判斷線程是否正在執(zhí)行

  \通過finished屬性判斷線程是否執(zhí)行完畢

  \通過cancelled屬性判斷線程是否被取消

  線程同步

  原因:多個(gè)線程訪問同一資源,很可能會(huì)引起數(shù)據(jù)錯(cuò)亂和數(shù)據(jù)安全問題

  解決方案:使用互斥鎖來解決互斥資源訪問問題,iOS中通常使用@synchronized(鎖){}對臨界資源進(jìn)行鎖定,通常使用self作為鎖

  注意:由于線程同步會(huì)消耗大量的資源,應(yīng)盡量避免多個(gè)線程訪問同一資源,且通常將線程同步的邏輯交由服務(wù)器端實(shí)現(xiàn)

  線程之間的通信

  從子線程回到主線程

  - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait

  modes:(NSArray *)array

  array指定runLoop的模式,若為空,則不執(zhí)行aselector

  方法的調(diào)用者即為aselector的調(diào)用者

  - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait

  從一個(gè)線程到另一個(gè)線程(包括主線程)

  - (void)performSelector:(SEL)aSelector onThread:(NSThread )thr withObject:(id)arg waitUntilDone:

  (BOOL)wait modes:(NSArray )array

  - (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg

  waitUntilDone:(BOOL)wait

  也可以通過NSPort對象實(shí)現(xiàn)通信

  瘋狂軟件教育擁有最專業(yè)的瘋狂iOS學(xué)習(xí)線路圖,不僅證明瘋狂軟件iOS無與倫比的課程深度,也證明了瘋狂軟件iOS深厚的技術(shù)底蘊(yùn);同時(shí)也指引了iOS學(xué)習(xí)者的自學(xué)方向。iOS培訓(xùn)采用全新的iMac蘋果一體機(jī)教學(xué),瘋狂軟件教育重點(diǎn)培養(yǎng)學(xué)員理解軟件開發(fā)過程,形成良好的編碼習(xí)慣,能獨(dú)立完成iPhone手機(jī)和iPad平板電腦上App 開發(fā),積累一定的項(xiàng)目經(jīng)驗(yàn),能滿足企業(yè)對iOS相關(guān)的人才需求,短期內(nèi)成就高薪iOS開發(fā)人才。如需了解更多,可以咨詢QQ:544627560搶座熱線:020-28309358 咨詢QQ:707552864可登陸瘋狂軟件教育官網(wǎng)查詢。

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請遵守用戶 評(píng)論公約

    類似文章 更多