創(chuàng)建信號量的方式:

目前創(chuàng)新互聯(lián)已為近1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、網(wǎng)站改版維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、蒼南網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
(1)dispatch_semaphore_creat SignalCount = dispatch_semaphore_creat(10).
這個地方后面的這個10,是一個整數(shù),可以是1,2,3,。。。表示在信號等待的時候,下一次收到的的信號量,說白了,就是這個數(shù)字控制的最大并發(fā)數(shù)。
(2)dispatch_semaphore_signal( ),這是一句表示信號通知。表示在信號等待的時候,收到的下一個信號量。一般是一個“信號量對象”。
(3)dispatch_semaphore_wait(參數(shù)一,參數(shù)二 ),這一句表示信號等待。
一般參數(shù)一會放一個信號對象,就是我們建立的那個,如果這個對列的信號量小于0的時候,就會一直等待下去。
參數(shù)二的值一般是 DISPATCH_TIME_FOREVER 和 DISPATCH_TIME_NOW
下面我們寫一段代碼來說明一下。(注:當(dāng)然是參考別人的)
這個地方,解釋一下,新建一個信號量為10的對象,就是將隊(duì)列的最大并發(fā)數(shù)控制在10。
第一次打印的結(jié)果是 0,1,2,3,4,5,6,7,8,9。十個數(shù)字。
最關(guān)鍵的是dispatch_semaphore_signal(semphore),如果打印完第一輪十個數(shù)字,不再進(jìn)行信號通知的話,線程就永遠(yuǎn)阻塞下去咯。剩下的10~99就不會再打印下去。
(注:以上是看了一個大神地思路以后,自己擺弄了一下,然后給大家解釋一下,感謝那位大神,有些公司去面試的時候,會問NSOperation這個類通過調(diào)用setMaxConcurrentOperationCount這個方法設(shè)置最大的并發(fā)數(shù),多線程技術(shù)GCD可以嗎?答案是可以的,還有之前看過另外一個大神的,通過信號量控制,將異步的線程變成同步線程的,有興趣的同學(xué)可以去參閱以下)。
線程的不安全是由于多線程訪問和修改共享資源而引起的不可預(yù)測的結(jié)果。
ios多線程開發(fā)中為保證線程的安全常用到的幾種鎖: NSLock 、 dispatch_semaphore 、 NSCondition 、 NSRecursiveLock 、 @synchronized 。
WEAKSELF typeof(self) __weak weakSelf = self;
NSLock 是OC層封裝底層線程操作來實(shí)現(xiàn)的一種鎖,繼承NSLocking協(xié)議。不能迭代加鎖,如果發(fā)生兩次lock,而未unlock過,則會產(chǎn)生死鎖問題。
以車站購票為例,多個窗口同時售票(同步),每個窗口有人循環(huán)購票:
原子操作
原子操作是指不可打斷的操作,也就是說線程在執(zhí)行操作的過程中,不會被操作系統(tǒng)掛起,而是一定會執(zhí)行完,
變量屬性Property中的原子定義
一般我們定義一個變量@property (nonatomic ,strong)NSLock *lock;nonatomic:非原子性,不會為setter方法加鎖,適合內(nèi)存小的移動設(shè)備;atomic:原子性,默認(rèn)為setter方法加鎖(默認(rèn)就是atomic),線程安全。
PS: 在iOS開發(fā)過程中,一般都將屬性聲明為nonatomic,盡量避免多線程搶奪同一資源,盡量將加鎖等資源搶奪業(yè)務(wù)交給服務(wù)器。
NSCondition常用于生產(chǎn)者-消費(fèi)者模式,它繼承了NSLocking協(xié)議,同樣有l(wèi)ock和unlock方法。條件變量有點(diǎn)像信號量,提供了線程阻塞和信號機(jī)制,因此可以用來阻塞某個線程,并等待數(shù)據(jù)就緒再喚醒程序。
信號量主要有3個函數(shù),分別是:
注意: 正常的使用順序是先降低然后提高,這兩個函數(shù)通常都是成對出現(xiàn)。
本文主要參考了這篇文章(
),并對其中所能理解的部分進(jìn)行一一驗(yàn)證,以前沒怎么寫過類似的,如果有什么做的不好的地方還請大家多多見諒!
線程和進(jìn)程在我們開發(fā)中,跟我們一直形影不離,那么什么是進(jìn)程,什么是線程,它們又有什么關(guān)系,這篇文章將為您簡單介紹。
線程概念
進(jìn)程概念
地址空間:同?進(jìn)程的線程共享本進(jìn)程的地址空間( TLS是本地的線程棧存空間,線程的局部空間是某些操作系統(tǒng)為線程提供的私有空間,只具備有限的容量,并不屬于線程,由操作系統(tǒng)單獨(dú)安排的 ),?進(jìn)程之間則是獨(dú)?的地址空間。
資源擁有:同?進(jìn)程內(nèi)的線程共享本進(jìn)程的資源如內(nèi)存、I/O、cpu等,但是進(jìn)程之間的資源是獨(dú)?的。
優(yōu)點(diǎn):
缺點(diǎn):
時間?的概念:CPU在多個任務(wù)直接進(jìn)?快速的切換,這個時間間隔就是時間?。
多線程同時執(zhí)行
如果線程非常多
互斥鎖?結(jié)
互斥鎖參數(shù)
nonatomic?原?屬性
atomic原?屬性(線程安全),針對多線程設(shè)計(jì)的,默認(rèn)值,保證同?時間只有?個線程能夠?qū)?(但是同?個時間多個線程都可以取值)
atomic本身就有?把鎖(?旋鎖)
單寫多讀:單個線程寫?,多個線程可以讀取
atomic:線程安全,需要消耗?量的資源
nonatomic:?線程安全,適合內(nèi)存?的移動設(shè)備
iOS開發(fā)建議
所有屬性都聲明為nonatomic
盡量避免多線程搶奪同一塊資源
盡量將加鎖,資源搶奪的業(yè)務(wù)邏輯交給服務(wù)器處理,減少APP的壓力
這篇文章簡單介紹了線程與進(jìn)程的概念,煩請大家不吝賜教。
在多線程開發(fā)中,我們常用到GCD,這里探討一下GCD任務(wù)的取消:
1.在iOS 8以后,系統(tǒng)給我們提供了這樣的取消函數(shù) dispatch_block_cancel,不過這個也只能用于dispatch_block_create創(chuàng)建的dispatch_block_t,我們試驗(yàn)一下:
這時肯定是任務(wù)都會執(zhí)行的
接下來,把注釋的那一行 dispatch_block_cancel(block1);打開,看看效果:
我們發(fā)現(xiàn)block1確實(shí)被取消掉了。這是dispatch_block_cancel的用法。
2.很多時候,我們的場景不會去用dispatch_block_create創(chuàng)建dispatch_block_t,這個時候我們?nèi)粝肴∠粋€任務(wù),可以考慮用一個條件來做,滿足條件則執(zhí)行此任務(wù),不滿足則不執(zhí)行,舉個例子:
效果如下:
寫到這里,這兒其實(shí)還隱藏了一個知識點(diǎn),就是block的變量捕獲,有興趣或是不理解的朋友可以研究一下。(如下,為何輸出不是20而是10)
3.過渡到NSOperation
NSOperation是對GCD的封裝,底層也是GCD。
NSOperation給我們封裝了更多的api,這是我在Xcode中提出來的:
我們可以發(fā)現(xiàn)它有狀態(tài)屬性,有取消方法,也有添加依賴方法等...這里我們還是先說取消吧,下面來給大家寫個demo:
這時輸出是:
因?yàn)檎趫?zhí)行的任務(wù),NSOperation也是不能取消的,所以也是需要將cancel在start前調(diào)用的(就如同滿足一個條件是否需要cancel一樣,也可以滿足條件不調(diào)用start)
你知道嗎?IOS軟件工程師已經(jīng)成為軟件人才中的緊缺型人才!
國內(nèi)外出現(xiàn)大量的“IOS人才荒”,未來幾年IOS人才需求缺口將達(dá)百萬!
招聘網(wǎng)站上,IOS軟件工程師依然成為各大企業(yè)哄搶的對象,不少企業(yè)為招聘這類人才,不惜花重金招攬,騰訊、聯(lián)想、新浪等國內(nèi)企業(yè)也毫不例外地爭奪IOS軟件工程師,很多IOS開發(fā)崗位年薪已高達(dá)幾十萬!
課程內(nèi)容
內(nèi)容介紹
預(yù)備階段
1、文件管理器Finder
2、iWork使用Numbers,Keynote,Pages
3、Safari瀏覽器
?
?
MacOs的使用,iWork的使用
iOS開發(fā)基礎(chǔ)
1、iOS開發(fā)的系統(tǒng)環(huán)境介紹、Xcode集成開發(fā)環(huán)境詳解、常用軟件的介紹
2、數(shù)據(jù)類型、常量和變量、運(yùn)算符、賦值語句和表達(dá)式;分支、循環(huán)
3、函數(shù),數(shù)組(一維數(shù)組、二維數(shù)組、多維數(shù)組),結(jié)構(gòu)體
4、指針數(shù)組、數(shù)組指針,結(jié)構(gòu)體指針
5、指向指針的指針,宏定義、枚舉,const,static
?
?
?
1、Xcode、SVN
2、C語言是iOS開發(fā)的入門基礎(chǔ)語言,本部分主要介紹C語言的基本語法,程序結(jié)構(gòu),以及指針的各種操作。
為接下來Objective-C語言的學(xué)習(xí)打下基礎(chǔ)。
?
1、面向?qū)ο螅∣OP)和面向過程、類(Class)和對象(Object)、類的定義
2、創(chuàng)建對象、self和super關(guān)鍵字、屬性以及點(diǎn)語法(nonatomic,assign、retain、copy,readonly、readwrite)
3、便利構(gòu)造器、單例(Singleton)
4、堆棧、內(nèi)存管理(alloc、copy、retain,release、autorelease,strong、weak)
5、鍵值編碼(KVC)、鍵值監(jiān)聽(KVO)、通知(NSNotification)
6、類目(Category)、延展(Extention)、協(xié)議(protocol)
?
?
?
?
?
?
?
Objective-C是iOS與MacOS開發(fā)的主要語言,它是對C語言的擴(kuò)展,并融入了面向?qū)ο蟮奶攸c(diǎn)。
包含封裝、繼承、多態(tài)三大特性,本部分主要介紹OC的基本語法,新的特性,內(nèi)存管理等內(nèi)容
?
1、字符串(NSStringNSMutableString)、數(shù)值對象(NSNumberNSValue)
2、數(shù)組(NSArray,NSMutableArray)、字典(NSDictionary,NSMutableDictionary)、集合(NSSet,NSMutableSet)、快速枚舉(for?in)NSIndexPath
3、日期與時間(NSDate)、日期格式(NSDataFormatter)、日歷(NSCalendar)、定時器(NSTimer)
4、文件管理(NSFileManager)、程序包(NSBundle)、緩沖區(qū)(NSData)
5、網(wǎng)絡(luò)連接(NSURLConnection)、網(wǎng)絡(luò)地址(NSURL)、網(wǎng)絡(luò)請求(NSURLRequest)、請求回應(yīng)(NSResponse)、錯誤信息處理(N0SError)
6、MVC編程,簡單控件一:標(biāo)簽(UILabel)、文本輸入(UITextField)、按鈕(UIButton)、提示框(UIAlertView、UIActionSheet
7、使用面向?qū)ο驩OP方法,實(shí)施計(jì)算機(jī)APP應(yīng)用.要求學(xué)員應(yīng)用前期學(xué)習(xí)中的大部分知識點(diǎn)
?
?
?
?
?
iOS的基礎(chǔ)框架,包含了iOS開發(fā)的基本數(shù)據(jù)類型,在iOSSDK中幾乎部NS開頭的類都屬于這個框架,我們將詳細(xì)介紹開發(fā)中常用的類。
iOS開發(fā)
1、窗口(UIWindow)、視圖(UIView)、應(yīng)用程序(UIApplication)
2、繪圖(drawRect)、QuartzCoreDemo、CGContextRef
3、觸摸(UITouch)、事件(UIEvent)、手勢(UIGestureRecognizer)、UIResponder、消息傳遞、響應(yīng)者鏈
4、UIView以及CALayer動畫(CAAnimation、CABasicAnimation、CAKeyFrameAnimation)
5、活動提示(UIActivityIndicatorView)、圖像(UIImageView)
6、控件二:滾動視圖(UIScrollView)、頁控制器(UIPageControl)、開關(guān)(UISwitch)、單選(UISegmentControl)、滑塊(UISlider)
7、控件三:多行文本(UITextView)、網(wǎng)頁視圖(UIWebView)、滾輪(UIPickerView)、日期滾輪(UIDatePickerView)、表格視圖(UITableView)、表格項(xiàng)(UITableViewCell)
8、視圖控制器(UIViewController)、導(dǎo)航控制器(UINavigationController)、標(biāo)簽控制器(UITabBarController)、表格控制器(UITableViewController)、相冊控制器(UIImagePickerController)
?
?
?
?
?
?
?
?
?
?
?
?
?
?
UIKit處于Cocoa四層結(jié)構(gòu)的上層CocoaTouch層,是iOS開發(fā)中的控件框架,定義了幾乎部可視化控件,在iOS開發(fā)中占據(jù)地位,我們不會學(xué)習(xí)各個控件的用法,而且會講述各個控件在不同版本系統(tǒng)里的樣式,教大家如何自定義控件樣式。
學(xué)完他們我們就可以做自己個性化的界面了。
結(jié)合前期所學(xué)知識,應(yīng)用UIKit框架詳解中所學(xué)的UI控件及知識點(diǎn),模擬實(shí)現(xiàn)Safari瀏覽器
iPhoneSafari瀏覽器原型App。
1、音頻播放(AVAudioPlayer)、視頻播放(MPMoviePlayerViewController)以及播放ipod音樂
2、照相機(jī)(UIImagePickerController)以及相冊的使用
3、短信(MFMessageComposeViewController)、郵件(MFMailComposeViewController)的使用
4、加速計(jì)(UIAccelerometer)的使用、帳號注冊、真機(jī)調(diào)試、上傳程序
5、地圖(MKMapView)的使用以及定位(CoreLocation)
6、數(shù)據(jù)持久化(文件讀寫、sqlite數(shù)據(jù)庫、歸檔、NSCoding協(xié)議)、云存儲(iCloud)
7、多線程開發(fā)(NSThread、NSLock),操作隊(duì)列(NSOperationQueue)
8、網(wǎng)絡(luò)請求(GET、POST)、xml解析、json解析、Socket編程
?
iOS應(yīng)用特性框架是對上述兩個框架之外其他框架的統(tǒng)稱。
主要課程內(nèi)容為:音頻、視頻的播放、照相機(jī)的使用、加速計(jì)的應(yīng)用,地圖框架的使用、短信、郵件的應(yīng)用等等,而且也會介紹當(dāng)前應(yīng)用開發(fā)中使用非常廣泛的開源框架,同時還將講解開發(fā)者帳號的注冊、真機(jī)調(diào)試、以及程序上傳。
iOS游戲開發(fā)
1、Cocos2DHelloWorld,CCDirector(導(dǎo)演類),CCScene(場景類),CCLayer
2、CCSprite(精靈類),CCAction(動作)
3、CCMemu(菜單),CCLabelTTF(標(biāo)簽)
4、CCPointParticleSystem(點(diǎn)粒子系統(tǒng))
5、練習(xí):植物大戰(zhàn)僵尸游戲開發(fā)
?
2D游戲引擎的使用,部課程內(nèi)容以"植物大戰(zhàn)僵尸"為例,貫穿其中
1、在Xcode下編譯C++程序,C++類Class,成員變量,成員函數(shù),對象的創(chuàng)建
2、構(gòu)造函數(shù)與析構(gòu)函數(shù),newdelete關(guān)鍵字,內(nèi)存管理
3、繼承,函數(shù)重載,操作符重載,拷貝構(gòu)造
4、模版template與泛型
5、Objective-C與C++混合編程
?
C++是目前流行的開發(fā)語言之一,C++基本語法,C++面象對像的特性.在XCode下如何使用C++語言編程.
1、物理世界(b2World),剛體(b2Body),精靈與剛體連接
2、碰撞測試(b2ContactListener)
3、剛體的連接關(guān)節(jié)(b2Joint)
4、練習(xí):憤怒的小鳥開發(fā)
5、OpenGLES開發(fā)基礎(chǔ)
?
iOS游戲開發(fā)中使用多的物理引擎,以憤怒的小鳥為例學(xué)習(xí)Box2D開發(fā).
項(xiàng)目實(shí)訓(xùn)
項(xiàng)目會用到網(wǎng)絡(luò)、數(shù)據(jù)庫、各種常用控件、以及各種Foundation類。
目前有很多項(xiàng)目可以選擇使用,比如:互動百科(新聞類應(yīng)用)、樂視(電影類應(yīng)用)、創(chuàng)業(yè)邦(雜志類應(yīng)用)、尚品網(wǎng)(購物類應(yīng)用)、雅座空間(團(tuán)購類應(yīng)用)、找地(定位類應(yīng)用)、我是數(shù)學(xué)家(教育類應(yīng)用)、YY客戶端(語音類應(yīng)用)、麥咨達(dá)(條碼掃描類應(yīng)用)、中國建行(銀行類應(yīng)用)、CuteMath(游戲類應(yīng)用)、車震搖搖樂(娛樂類應(yīng)用)、新浪微博(微博類應(yīng)用)等等
老師程帶領(lǐng)學(xué)生做一個真實(shí)項(xiàng)目,從需求分析開始帶起,然后技術(shù)調(diào)研,工期評估、編碼、測試、優(yōu)化代碼、上傳程序等項(xiàng)目內(nèi)容會包括幾點(diǎn):網(wǎng)絡(luò)數(shù)據(jù)解析、團(tuán)隊(duì)協(xié)調(diào)、版本管理、制作文檔、復(fù)雜表布局、制作CELL類、動畫應(yīng)用、定位、方向地址解析、百度地圖應(yīng)用
新聞標(biāo)題:ios多線程開發(fā),ios什么時候用到多線程
本文URL:http://chinadenli.net/article46/dsecihg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、自適應(yīng)網(wǎng)站、企業(yè)網(wǎng)站制作、網(wǎng)站制作、網(wǎng)站導(dǎo)航、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)