阿里妹導(dǎo)讀:剛剛,阿里巴巴正式對(duì)外開源了基于 Apache 2.0 協(xié)議的協(xié)程開發(fā)框架 coobjc,開發(fā)者們可以在 Github 上自主下載。
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比澗西網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式澗西網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋澗西地區(qū)。費(fèi)用合理售后完善,10余年實(shí)體公司更值得信賴。
coobjc是為iOS平臺(tái)打造的開源協(xié)程開發(fā)框架,支持Objective-C和Swift,同時(shí)提供了cokit庫(kù)為Foundation和UIKit中的部分API提供了 協(xié)程 化支持,本文將為大家詳細(xì)介紹coobjc的設(shè)計(jì)理念及核心優(yōu)勢(shì)。
從2008年第一個(gè)iOS版本發(fā)布至今的11年時(shí)間里,iOS的異步編程方式發(fā)展緩慢。
基于 Block 的異步編程回調(diào)是目前 iOS 使用最廣泛的異步編程方式,iOS 系統(tǒng)提供的 GCD 庫(kù)讓異步開發(fā)變得很簡(jiǎn)單方便,但是基于這種編程方式的缺點(diǎn)也有很多,主要有以下幾點(diǎn):
針對(duì)多線程以及尤其引發(fā)的各種崩潰和性能問題,我們制定了很多編程規(guī)范、進(jìn)行了各種新人培訓(xùn),嘗試降低問題發(fā)生的概率,但是問題依然很嚴(yán)峻,多線程引發(fā)的問題占比并沒有明顯的下降,異步編程本來(lái)就是很復(fù)雜的事情,單靠規(guī)范和培訓(xùn)是難以從根本上解決問題的,需要有更加好的編程方式來(lái)解決。
上述問題在很多系統(tǒng)和語(yǔ)言開發(fā)中都可能會(huì)碰到,解決問題的標(biāo)準(zhǔn)方式就是使用協(xié)程,C#、Kotlin、Python、Javascript 等熱門語(yǔ)言均支持協(xié)程極其相關(guān)語(yǔ)法,使用這些語(yǔ)言的開發(fā)者可以很方便的使用協(xié)程及相關(guān)功能進(jìn)行異步編程。
2017 年的 C++ 標(biāo)準(zhǔn)開始支持協(xié)程,Swift5 中也包含了協(xié)程相關(guān)的標(biāo)準(zhǔn),從現(xiàn)在的發(fā)展趨勢(shì)看基于協(xié)程的全新的異步編程方式,是我們解決現(xiàn)有異步編程問題的有效的方式,但是蘋果基本已經(jīng)不會(huì)升級(jí) Objective-C 了,因此使用Objective-C的開發(fā)者是無(wú)法使用官方的協(xié)程能力的,而最新 Swift 的發(fā)布和推廣也還需要時(shí)日,為了讓廣大iOS開發(fā)者能快速享受到協(xié)程帶來(lái)的編程方式上的改變,手機(jī)淘寶架構(gòu)團(tuán)隊(duì)基于長(zhǎng)期對(duì)系統(tǒng)底層庫(kù)和匯編的研究,通過匯編和C語(yǔ)言實(shí)現(xiàn)了支持 Objective-C 和 Swift 協(xié)程的完美解決方案 —— coobjc。
核心能力
內(nèi)置系統(tǒng)擴(kuò)展庫(kù)
coobjc設(shè)計(jì)
最底層是協(xié)程內(nèi)核,包含了棧切換的管理、協(xié)程調(diào)度器的實(shí)現(xiàn)、協(xié)程間通信channel的實(shí)現(xiàn)等。
中間層是基于協(xié)程的操作符的包裝,目前支持async/await、Generator、Actor等編程模型。
最上層是對(duì)系統(tǒng)庫(kù)的協(xié)程化擴(kuò)展,目前基本上覆蓋了Foundation和UIKit的所有IO和耗時(shí)方法。
核心實(shí)現(xiàn)原理
協(xié)程的核心思想是控制調(diào)用棧的主動(dòng)讓出和恢復(fù)。一般的協(xié)程實(shí)現(xiàn)都會(huì)提供兩個(gè)重要的操作:
我們基于線程的代碼執(zhí)行時(shí)候,是沒法做出暫停操作的,我們現(xiàn)在要做的事情就是要代碼執(zhí)行能夠暫停,還能夠再恢復(fù)。 基本上代碼執(zhí)行都是一種基于調(diào)用棧的模型,所以如果我們能把當(dāng)前調(diào)用棧上的狀態(tài)都保存下來(lái),然后再能從緩存中恢復(fù),那我們就能夠?qū)崿F(xiàn)yield和 resume。
實(shí)現(xiàn)這樣操作有幾種方法呢?
上述第三種和第四種只是能過做到跳轉(zhuǎn),但是沒法保存調(diào)用棧上的狀態(tài),看起來(lái)基本上不能算是實(shí)現(xiàn)了協(xié)程,只能算做做demo,第五種除非官方支持,否則自行改寫編譯器通用性很差。而第一種方案的 ucontext 在iOS上是廢棄了的,不能使用。那么我們使用的是第二種方案,自己用匯編模擬一下 ucontext。
模擬ucontext的核心是通過getContext和setContext實(shí)現(xiàn)保存和恢復(fù)調(diào)用棧。需要熟悉不同CPU架構(gòu)下的調(diào)用約定(Calling Convention). 匯編實(shí)現(xiàn)就是要針對(duì)不同cpu實(shí)現(xiàn)一套,我們目前實(shí)現(xiàn)了 armv7、arm64、i386、x86_64,支持iPhone真機(jī)和模擬器。
說(shuō)了這么多,還是看看代碼吧,我們從一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)請(qǐng)求加載圖片功能來(lái)看看coobjc到底是如何使用的。
下面是最普通的網(wǎng)絡(luò)請(qǐng)求的寫法:
下面是使用coobjc庫(kù)協(xié)程化改造后的代碼:
原本需要20行的代碼,通過coobjc協(xié)程化改造后,減少了一半,整個(gè)代碼邏輯和可讀性都更加好,這就是coobjc強(qiáng)大的能力,能把原本很復(fù)雜的異步代碼,通過協(xié)程化改造,轉(zhuǎn)變成邏輯簡(jiǎn)潔的順序調(diào)用。
coobjc還有很多其他強(qiáng)大的能力,本文對(duì)于coobjc的實(shí)際使用就不過多介紹了,感興趣的朋友可以去官方github倉(cāng)庫(kù)自行下載查看。
我們?cè)趇Phone7 iOS11.4.1的設(shè)備上使用協(xié)程和傳統(tǒng)多線程方式分別模擬高并發(fā)讀取數(shù)據(jù)的場(chǎng)景,下面是兩種方式得到的壓測(cè)數(shù)據(jù)。
從上面的表格我們可以看到使用在并發(fā)量很小的場(chǎng)景,由于多線程可以完全使用設(shè)備的計(jì)算核心,因此coobjc總耗時(shí)要比傳統(tǒng)多線程略高,但是由于整體耗時(shí)都很小,因此差異并不明顯,但是隨著并發(fā)量的增大,coobjc的優(yōu)勢(shì)開始逐漸體現(xiàn)出來(lái),當(dāng)并發(fā)量超過1000以后,傳統(tǒng)多線程開始出現(xiàn)線程分配異常,而導(dǎo)致很多并發(fā)任務(wù)并沒有執(zhí)行,因此在上表中顯示的是大于20秒,實(shí)際是任務(wù)已經(jīng)無(wú)法正常執(zhí)行了,但是coobjc仍然可以正常運(yùn)行。
我們?cè)谑謾C(jī)淘寶這種超級(jí)App中嘗試了協(xié)程化改造,針對(duì)部分性能差的頁(yè)面,我們發(fā)現(xiàn)在滑動(dòng)過程中存在很多主線程IO調(diào)用、數(shù)據(jù)解析,導(dǎo)致幀率下降嚴(yán)重,通過引入coobjc,在不改變?cè)袠I(yè)務(wù)代碼的基礎(chǔ)上,通過全局hook部分IO、數(shù)據(jù)解析方法,即可讓原來(lái)在主線程中同步執(zhí)行的IO方法異步執(zhí)行,并且不影響原有的業(yè)務(wù)邏輯,通過測(cè)試驗(yàn)證,這樣的改造在低端機(jī)(iPhone6及以下的機(jī)器)上的幀率有20%左右的提升。
簡(jiǎn)明
易用
清晰
性能
程序是寫來(lái)給人讀的,只會(huì)偶爾讓機(jī)器執(zhí)行一下。——Abelson and Sussman
基于協(xié)程實(shí)現(xiàn)的編程范式能夠幫助開發(fā)者編寫出更加優(yōu)美、健壯、可讀性更強(qiáng)的代碼。
協(xié)程可以幫助我們?cè)诰帉懖l(fā)代碼的過程中減少線程和鎖的使用,提升應(yīng)用的性能和穩(wěn)定性。
本文作者:淘寶技術(shù)
你知道嗎?IOS軟件工程師已經(jīng)成為軟件人才中的緊缺型人才!
國(guó)內(nèi)外出現(xiàn)大量的“IOS人才荒”,未來(lái)幾年IOS人才需求缺口將達(dá)百萬(wàn)!
招聘網(wǎng)站上,IOS軟件工程師依然成為各大企業(yè)哄搶的對(duì)象,不少企業(yè)為招聘這類人才,不惜花重金招攬,騰訊、聯(lián)想、新浪等國(guó)內(nèi)企業(yè)也毫不例外地爭(zhēng)奪IOS軟件工程師,很多IOS開發(fā)崗位年薪已高達(dá)幾十萬(wàn)!
課程內(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)算符、賦值語(yǔ)句和表達(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語(yǔ)言是iOS開發(fā)的入門基礎(chǔ)語(yǔ)言,本部分主要介紹C語(yǔ)言的基本語(yǔ)法,程序結(jié)構(gòu),以及指針的各種操作。
為接下來(lái)Objective-C語(yǔ)言的學(xué)習(xí)打下基礎(chǔ)。
?
1、面向?qū)ο螅∣OP)和面向過程、類(Class)和對(duì)象(Object)、類的定義
2、創(chuàng)建對(duì)象、self和super關(guān)鍵字、屬性以及點(diǎn)語(yǔ)法(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ā)的主要語(yǔ)言,它是對(duì)C語(yǔ)言的擴(kuò)展,并融入了面向?qū)ο蟮奶攸c(diǎn)。
包含封裝、繼承、多態(tài)三大特性,本部分主要介紹OC的基本語(yǔ)法,新的特性,內(nèi)存管理等內(nèi)容
?
1、字符串(NSStringNSMutableString)、數(shù)值對(duì)象(NSNumberNSValue)
2、數(shù)組(NSArray,NSMutableArray)、字典(NSDictionary,NSMutableDictionary)、集合(NSSet,NSMutableSet)、快速枚舉(for?in)NSIndexPath
3、日期與時(shí)間(NSDate)、日期格式(NSDataFormatter)、日歷(NSCalendar)、定時(shí)器(NSTimer)
4、文件管理(NSFileManager)、程序包(NSBundle)、緩沖區(qū)(NSData)
5、網(wǎng)絡(luò)連接(NSURLConnection)、網(wǎng)絡(luò)地址(NSURL)、網(wǎng)絡(luò)請(qǐng)求(NSURLRequest)、請(qǐng)求回應(yīng)(NSResponse)、錯(cuò)誤信息處理(N0SError)
6、MVC編程,簡(jiǎn)單控件一:標(biāo)簽(UILabel)、文本輸入(UITextField)、按鈕(UIButton)、提示框(UIAlertView、UIActionSheet
7、使用面向?qū)ο驩OP方法,實(shí)施計(jì)算機(jī)APP應(yīng)用.要求學(xué)員應(yīng)用前期學(xué)習(xí)中的大部分知識(shí)點(diǎn)
?
?
?
?
?
iOS的基礎(chǔ)框架,包含了iOS開發(fā)的基本數(shù)據(jù)類型,在iOSSDK中幾乎部NS開頭的類都屬于這個(gè)框架,我們將詳細(xì)介紹開發(fā)中常用的類。
iOS開發(fā)
1、窗口(UIWindow)、視圖(UIView)、應(yīng)用程序(UIApplication)
2、繪圖(drawRect)、QuartzCoreDemo、CGContextRef
3、觸摸(UITouch)、事件(UIEvent)、手勢(shì)(UIGestureRecognizer)、UIResponder、消息傳遞、響應(yīng)者鏈
4、UIView以及CALayer動(dòng)畫(CAAnimation、CABasicAnimation、CAKeyFrameAnimation)
5、活動(dòng)提示(UIActivityIndicatorView)、圖像(UIImageView)
6、控件二:滾動(dòng)視圖(UIScrollView)、頁(yè)控制器(UIPageControl)、開關(guān)(UISwitch)、單選(UISegmentControl)、滑塊(UISlider)
7、控件三:多行文本(UITextView)、網(wǎng)頁(yè)視圖(UIWebView)、滾輪(UIPickerView)、日期滾輪(UIDatePickerView)、表格視圖(UITableView)、表格項(xiàng)(UITableViewCell)
8、視圖控制器(UIViewController)、導(dǎo)航控制器(UINavigationController)、標(biāo)簽控制器(UITabBarController)、表格控制器(UITableViewController)、相冊(cè)控制器(UIImagePickerController)
?
?
?
?
?
?
?
?
?
?
?
?
?
?
UIKit處于Cocoa四層結(jié)構(gòu)的上層CocoaTouch層,是iOS開發(fā)中的控件框架,定義了幾乎部可視化控件,在iOS開發(fā)中占據(jù)地位,我們不會(huì)學(xué)習(xí)各個(gè)控件的用法,而且會(huì)講述各個(gè)控件在不同版本系統(tǒng)里的樣式,教大家如何自定義控件樣式。
學(xué)完他們我們就可以做自己個(gè)性化的界面了。
結(jié)合前期所學(xué)知識(shí),應(yīng)用UIKit框架詳解中所學(xué)的UI控件及知識(shí)點(diǎn),模擬實(shí)現(xiàn)Safari瀏覽器
iPhoneSafari瀏覽器原型App。
1、音頻播放(AVAudioPlayer)、視頻播放(MPMoviePlayerViewController)以及播放ipod音樂
2、照相機(jī)(UIImagePickerController)以及相冊(cè)的使用
3、短信(MFMessageComposeViewController)、郵件(MFMailComposeViewController)的使用
4、加速計(jì)(UIAccelerometer)的使用、帳號(hào)注冊(cè)、真機(jī)調(diào)試、上傳程序
5、地圖(MKMapView)的使用以及定位(CoreLocation)
6、數(shù)據(jù)持久化(文件讀寫、sqlite數(shù)據(jù)庫(kù)、歸檔、NSCoding協(xié)議)、云存儲(chǔ)(iCloud)
7、多線程開發(fā)(NSThread、NSLock),操作隊(duì)列(NSOperationQueue)
8、網(wǎng)絡(luò)請(qǐng)求(GET、POST)、xml解析、json解析、Socket編程
?
iOS應(yīng)用特性框架是對(duì)上述兩個(gè)框架之外其他框架的統(tǒng)稱。
主要課程內(nèi)容為:音頻、視頻的播放、照相機(jī)的使用、加速計(jì)的應(yīng)用,地圖框架的使用、短信、郵件的應(yīng)用等等,而且也會(huì)介紹當(dāng)前應(yīng)用開發(fā)中使用非常廣泛的開源框架,同時(shí)還將講解開發(fā)者帳號(hào)的注冊(cè)、真機(jī)調(diào)試、以及程序上傳。
iOS游戲開發(fā)
1、Cocos2DHelloWorld,CCDirector(導(dǎo)演類),CCScene(場(chǎng)景類),CCLayer
2、CCSprite(精靈類),CCAction(動(dòng)作)
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ù),對(duì)象的創(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ā)語(yǔ)言之一,C++基本語(yǔ)法,C++面象對(duì)像的特性.在XCode下如何使用C++語(yǔ)言編程.
1、物理世界(b2World),剛體(b2Body),精靈與剛體連接
2、碰撞測(cè)試(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)目會(huì)用到網(wǎng)絡(luò)、數(shù)據(jù)庫(kù)、各種常用控件、以及各種Foundation類。
目前有很多項(xiàng)目可以選擇使用,比如:互動(dòng)百科(新聞?lì)悜?yīng)用)、樂視(電影類應(yīng)用)、創(chuàng)業(yè)邦(雜志類應(yīng)用)、尚品網(wǎng)(購(gòu)物類應(yīng)用)、雅座空間(團(tuán)購(gòu)類應(yīng)用)、找地(定位類應(yīng)用)、我是數(shù)學(xué)家(教育類應(yīng)用)、YY客戶端(語(yǔ)音類應(yīng)用)、麥咨達(dá)(條碼掃描類應(yīng)用)、中國(guó)建行(銀行類應(yīng)用)、CuteMath(游戲類應(yīng)用)、車震搖搖樂(娛樂類應(yīng)用)、新浪微博(微博類應(yīng)用)等等
老師程帶領(lǐng)學(xué)生做一個(gè)真實(shí)項(xiàng)目,從需求分析開始帶起,然后技術(shù)調(diào)研,工期評(píng)估、編碼、測(cè)試、優(yōu)化代碼、上傳程序等項(xiàng)目?jī)?nèi)容會(huì)包括幾點(diǎn):網(wǎng)絡(luò)數(shù)據(jù)解析、團(tuán)隊(duì)協(xié)調(diào)、版本管理、制作文檔、復(fù)雜表布局、制作CELL類、動(dòng)畫應(yīng)用、定位、方向地址解析、百度地圖應(yīng)用
ios的開發(fā)框架有很多,常用的框架有Foundation、UIKit、CoreData和CoreGraphics等。
Foundation框架可以為所有的應(yīng)用程序提供基本系統(tǒng)服務(wù);UIKit提供了在屏幕上繪制的機(jī)制,捕獲事件,和創(chuàng)建通用用戶界面元素,所有的iOS應(yīng)用程序都基于UIKit。
CoreData提供對(duì)象的管理,使用CoreData,可以創(chuàng)建模型對(duì)象并管理這些對(duì)象;高質(zhì)量的圖形對(duì)于所有的iOS應(yīng)用程序很重要,CoreGraphics則提供了更底層的庫(kù)來(lái)幫助創(chuàng)建復(fù)雜圖形。
總結(jié):
ios的開發(fā)框架有很多,常用的框架有Foundation、UIKit、CoreData和CoreGraphics等。
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:0731-84117792E-MAIL:11247931@qq.com
既然要承載 web 頁(yè)面,一個(gè)原生的 WebView 必不可少。在 iOS 中,目前已經(jīng)有兩款高性能、功能齊全的 web 瀏覽器,UIWebView (=2.0)和 WKWebView(=7.0)。
當(dāng)然,兩種 web 瀏覽器選其一即可。網(wǎng)上有很多文章,包括我之前已經(jīng)發(fā)表的博文中,都介紹過這兩種瀏覽器,讀者可以根據(jù)自己的需要選擇。
就目前的情況看,UIWebView 發(fā)展了很多年,目前市面上大部分的 web 頁(yè)面也都支持這樣的瀏覽器,因此很多公司在選擇的時(shí)候都使用這個(gè),但是,我們知道,WKWebView 有太多改善前者的優(yōu)點(diǎn),而且也是蘋果官方提倡大家使用的,為了性能,為了更多的特性,建議初次搭建的朋友采用 WKWebView。
為了實(shí)現(xiàn) h5 與 native 之間的互相調(diào)用,我們需要在兩者之間架一層橋來(lái)實(shí)現(xiàn),關(guān)于 bridge,之前的文章也有介紹。
bridge 的功能包括:native 調(diào)用 h5,h5 回調(diào) native,h5 調(diào)用 native,native 回調(diào) h5。
有了 bridge,h5可以使用 native 支持的更多特性,native 可以獲取 h5 頁(yè)面加載的信息,也可以讓 web 頁(yè)面動(dòng)態(tài)執(zhí)行一些腳本做一些事。
總之,在 web 容器框架中,這個(gè) bridge 還是很有必要的。
嗯,這個(gè)是輔助項(xiàng),做了這一步可以進(jìn)一步提高 web 容器的加載性能,而且資源緩存到本地后可以做到不依賴網(wǎng)絡(luò),提高用戶體驗(yàn)。
通常有兩種做法,
UIWebView 使用簡(jiǎn)單,而且現(xiàn)在用戶的手機(jī)性能也已經(jīng)不再是頁(yè)面展示性能的瓶頸,所以,這里介紹的依然采用 UIWebView 作為 web 瀏覽器。
WebViewJavascriptBridge 是一款非常強(qiáng)大的第三方開源 bridge 庫(kù),同時(shí)支持 UIWebView 和 WKWebView。
git 地址
NJKWebViewProgress 是一款能使 UIWebview 顯示加載進(jìn)度的第三方開源框架,支持代理協(xié)議處理和 progressview 展示兩種功能。
git 地址
基礎(chǔ)是要過關(guān)的,oop、多線程、db、基本算法或數(shù)據(jù)結(jié)構(gòu)是必須的。
還要熟練掌握Objective-C語(yǔ)言,C/C++語(yǔ)言;3.熟悉Cocoa開發(fā)框架,包括UI、網(wǎng)絡(luò)等方面,熟悉IOS開發(fā)工具和相關(guān)開發(fā)測(cè)試工具的使用,掌握常用的數(shù)據(jù)結(jié)構(gòu)與常用算法,較好的邏輯思維分析和表達(dá)和溝通能力,要有一定的自學(xué)能力,較強(qiáng)的團(tuán)隊(duì)協(xié)作意識(shí)。
更多關(guān)于ios游戲開發(fā)需要哪些知識(shí),進(jìn)入:查看更多內(nèi)容
分享名稱:ios開發(fā)框架,ios開發(fā)架構(gòu)設(shè)計(jì)
轉(zhuǎn)載注明:http://chinadenli.net/article36/dsisdpg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、虛擬主機(jī)、云服務(wù)器、企業(yè)網(wǎng)站制作、Google、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)