bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

ios開發(fā)框架搭建,ios開發(fā)環(huán)境搭建

剛剛,阿里開源 iOS 協(xié)程開發(fā)框架 coobjc!

阿里妹導(dǎo)讀:剛剛,阿里巴巴正式對外開源了基于 Apache 2.0 協(xié)議的協(xié)程開發(fā)框架 coobjc,開發(fā)者們可以在 Github 上自主下載。

專注于為中小企業(yè)提供網(wǎng)站建設(shè)、成都網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)乳源免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了成百上千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

coobjc是為iOS平臺打造的開源協(xié)程開發(fā)框架,支持Objective-C和Swift,同時提供了cokit庫為Foundation和UIKit中的部分API提供了 協(xié)程 化支持,本文將為大家詳細(xì)介紹coobjc的設(shè)計(jì)理念及核心優(yōu)勢。

從2008年第一個iOS版本發(fā)布至今的11年時間里,iOS的異步編程方式發(fā)展緩慢。

基于 Block 的異步編程回調(diào)是目前 iOS 使用最廣泛的異步編程方式,iOS 系統(tǒng)提供的 GCD 庫讓異步開發(fā)變得很簡單方便,但是基于這種編程方式的缺點(diǎn)也有很多,主要有以下幾點(diǎn):

針對多線程以及尤其引發(fā)的各種崩潰和性能問題,我們制定了很多編程規(guī)范、進(jìn)行了各種新人培訓(xùn),嘗試降低問題發(fā)生的概率,但是問題依然很嚴(yán)峻,多線程引發(fā)的問題占比并沒有明顯的下降,異步編程本來就是很復(fù)雜的事情,單靠規(guī)范和培訓(xùn)是難以從根本上解決問題的,需要有更加好的編程方式來解決。

上述問題在很多系統(tǒng)和語言開發(fā)中都可能會碰到,解決問題的標(biāo)準(zhǔn)方式就是使用協(xié)程,C#、Kotlin、Python、Javascript 等熱門語言均支持協(xié)程極其相關(guān)語法,使用這些語言的開發(fā)者可以很方便的使用協(xié)程及相關(guān)功能進(jìn)行異步編程。

2017 年的 C++ 標(biāo)準(zhǔn)開始支持協(xié)程,Swift5 中也包含了協(xié)程相關(guān)的標(biāo)準(zhǔn),從現(xiàn)在的發(fā)展趨勢看基于協(xié)程的全新的異步編程方式,是我們解決現(xiàn)有異步編程問題的有效的方式,但是蘋果基本已經(jīng)不會升級 Objective-C 了,因此使用Objective-C的開發(fā)者是無法使用官方的協(xié)程能力的,而最新 Swift 的發(fā)布和推廣也還需要時日,為了讓廣大iOS開發(fā)者能快速享受到協(xié)程帶來的編程方式上的改變,手機(jī)淘寶架構(gòu)團(tuán)隊(duì)基于長期對系統(tǒng)底層庫和匯編的研究,通過匯編和C語言實(shí)現(xiàn)了支持 Objective-C 和 Swift 協(xié)程的完美解決方案 —— coobjc。

核心能力

內(nèi)置系統(tǒng)擴(kuò)展庫

coobjc設(shè)計(jì)

最底層是協(xié)程內(nèi)核,包含了棧切換的管理、協(xié)程調(diào)度器的實(shí)現(xiàn)、協(xié)程間通信channel的實(shí)現(xiàn)等。

中間層是基于協(xié)程的操作符的包裝,目前支持async/await、Generator、Actor等編程模型。

最上層是對系統(tǒng)庫的協(xié)程化擴(kuò)展,目前基本上覆蓋了Foundation和UIKit的所有IO和耗時方法。

核心實(shí)現(xiàn)原理

協(xié)程的核心思想是控制調(diào)用棧的主動讓出和恢復(fù)。一般的協(xié)程實(shí)現(xiàn)都會提供兩個重要的操作:

我們基于線程的代碼執(zhí)行時候,是沒法做出暫停操作的,我們現(xiàn)在要做的事情就是要代碼執(zhí)行能夠暫停,還能夠再恢復(fù)。 基本上代碼執(zhí)行都是一種基于調(diào)用棧的模型,所以如果我們能把當(dāng)前調(diào)用棧上的狀態(tài)都保存下來,然后再能從緩存中恢復(fù),那我們就能夠?qū)崿F(xiàn)yield和 resume。

實(shí)現(xiàn)這樣操作有幾種方法呢?

上述第三種和第四種只是能過做到跳轉(zhuǎn),但是沒法保存調(diào)用棧上的狀態(tà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)就是要針對不同cpu實(shí)現(xiàn)一套,我們目前實(shí)現(xiàn)了 armv7、arm64、i386、x86_64,支持iPhone真機(jī)和模擬器。

說了這么多,還是看看代碼吧,我們從一個簡單的網(wǎng)絡(luò)請求加載圖片功能來看看coobjc到底是如何使用的。

下面是最普通的網(wǎng)絡(luò)請求的寫法:

下面是使用coobjc庫協(xié)程化改造后的代碼:

原本需要20行的代碼,通過coobjc協(xié)程化改造后,減少了一半,整個代碼邏輯和可讀性都更加好,這就是coobjc強(qiáng)大的能力,能把原本很復(fù)雜的異步代碼,通過協(xié)程化改造,轉(zhuǎn)變成邏輯簡潔的順序調(diào)用。

coobjc還有很多其他強(qiáng)大的能力,本文對于coobjc的實(shí)際使用就不過多介紹了,感興趣的朋友可以去官方github倉庫自行下載查看。

我們在iPhone7 iOS11.4.1的設(shè)備上使用協(xié)程和傳統(tǒng)多線程方式分別模擬高并發(fā)讀取數(shù)據(jù)的場景,下面是兩種方式得到的壓測數(shù)據(jù)。

從上面的表格我們可以看到使用在并發(fā)量很小的場景,由于多線程可以完全使用設(shè)備的計(jì)算核心,因此coobjc總耗時要比傳統(tǒng)多線程略高,但是由于整體耗時都很小,因此差異并不明顯,但是隨著并發(fā)量的增大,coobjc的優(yōu)勢開始逐漸體現(xiàn)出來,當(dāng)并發(fā)量超過1000以后,傳統(tǒng)多線程開始出現(xiàn)線程分配異常,而導(dǎo)致很多并發(fā)任務(wù)并沒有執(zhí)行,因此在上表中顯示的是大于20秒,實(shí)際是任務(wù)已經(jīng)無法正常執(zhí)行了,但是coobjc仍然可以正常運(yùn)行。

我們在手機(jī)淘寶這種超級App中嘗試了協(xié)程化改造,針對部分性能差的頁面,我們發(fā)現(xiàn)在滑動過程中存在很多主線程IO調(diào)用、數(shù)據(jù)解析,導(dǎo)致幀率下降嚴(yán)重,通過引入coobjc,在不改變原有業(yè)務(wù)代碼的基礎(chǔ)上,通過全局hook部分IO、數(shù)據(jù)解析方法,即可讓原來在主線程中同步執(zhí)行的IO方法異步執(zhí)行,并且不影響原有的業(yè)務(wù)邏輯,通過測試驗(yàn)證,這樣的改造在低端機(jī)(iPhone6及以下的機(jī)器)上的幀率有20%左右的提升。

簡明

易用

清晰

性能

程序是寫來給人讀的,只會偶爾讓機(jī)器執(zhí)行一下。——Abelson and Sussman

基于協(xié)程實(shí)現(xiàn)的編程范式能夠幫助開發(fā)者編寫出更加優(yōu)美、健壯、可讀性更強(qiáng)的代碼。

協(xié)程可以幫助我們在編寫并發(fā)代碼的過程中減少線程和鎖的使用,提升應(yīng)用的性能和穩(wěn)定性。

本文作者:淘寶技術(shù)

如何打造一個讓人愉快的iOS框架

文/OneV's Den這是我在今年 1 月 10 日@Swift 開發(fā)者大會上演講的文字稿。相關(guān)的視頻還在制作中,沒有到現(xiàn)場的朋友可以通過這個文字稿了解到這個 session 的內(nèi)容。雖然我的工作是程序員,但是最近半年其實(shí)我的主要干的事兒是養(yǎng)了一個小孩。 所以這半年來可以說沒有積累到什么技術(shù),反而是積累了不少養(yǎng)小孩的心得。 當(dāng)知道了有這么次會議可以分享這半年來的心得的時候,我毫不猶豫地選定了主題。那就是如何打造一個讓人愉快的小孩但考慮到這是一次開發(fā)者會議...當(dāng)我把這個想法和題目提交給大會的時候,被殘酷地拒絕了。考慮到我們是一次開發(fā)者大會,所以我需要找一些更合適的主題。其實(shí)如果你對自己的代碼有感情的話,我們開發(fā)和維護(hù)的項(xiàng)目或者框架就如同自己的孩子一般這也是我所能找到的兩者的共同點(diǎn)。所以,我將原來擬定的主題換了兩個字:如何打造一個讓人愉快的框架在正式開始前,我想先給大家分享一個故事。我們那兒的 iOS 開發(fā)小組里有一個叫做武田君的人,他的代碼寫得不錯,做事也非常嚴(yán)謹(jǐn),可以說是楷模般的員工。但是他有一個致命的弱點(diǎn) -- 喜歡自己發(fā)明輪子。他出于本能地抗拒在代碼中使用第三方框架,所以接到開發(fā)任務(wù)以后他一般都要花比其他小伙伴更多的時間才能完成。武田君其實(shí)在各個方面都有建樹...比如網(wǎng)絡(luò)請求 模型解析 導(dǎo)航效果 視圖動畫 ... 不過雖然造了很多輪子,但是代碼的重用比較糟糕,耦合嚴(yán)重。在新項(xiàng)目中使用的話,只能復(fù)制粘貼,然后針對項(xiàng)目修修補(bǔ)補(bǔ)。因?yàn)槌袚?dān)的任務(wù)總是沒有辦法完成,他一直是項(xiàng)目 deadline 的決定者,在日本這種社會,壓力可想而知。就在我這次回國之前,武田君來向我借了一本我本科時候最喜歡的書。就是這本:我有時候就想,到底是什么讓一個開發(fā)者面臨如此大的精神壓力,我們有什么辦法來緩解這種壓力。在我們有限的開發(fā)生涯中,應(yīng)該如何有效利用時間來做一些更有價值的事情。以上故事純屬虛構(gòu),如有雷同實(shí)屬巧合使用框架在了解如何制作框架之前,先讓我們看看如何使用框架。可以說,如果你想成為一個框架的提供者,首先你必須是一個優(yōu)秀的使用者。在 iOS 開發(fā)的早期,使用框架其實(shí)并不是一件讓人愉悅的事情。可能有幾年經(jīng)驗(yàn)的開發(fā)者都有這樣的體會,那就是:忘不了那些年,被手動引用和.a文件所支配的恐懼其實(shí)恐懼源于未知,回想一下,當(dāng)我們剛接觸軟件開發(fā)的時候,懵懵懂懂地引用了一個靜態(tài)庫,然后面對一排排編譯器報(bào)錯時候手足無措的絕望。但是當(dāng)我們了解了靜態(tài)庫的話,我們就能克服這種恐懼了。什么是靜態(tài)庫 (Static Library)所謂靜態(tài)庫,或者說 .a 文件,就是一系列從源碼編譯的目標(biāo)文件的集合。它是你的源碼的實(shí)現(xiàn)所對應(yīng)的二進(jìn)制。配合上公共的 .h 文件,我們可以獲取到 .a 中暴露的方法或者成員等。在最后編譯 app 的時候 .a 將被鏈接到最終的可執(zhí)行文件中,之后每次都隨著 app 的可執(zhí)行二進(jìn)制文件一同加載,你不能控制加載的方式和時機(jī),所以稱為靜態(tài)庫。在 iOS 8 之前,iOS 只支持以靜態(tài)庫的方式來使用第三方的代碼。什么是動態(tài)框架 (Dynamic Framework)與靜態(tài)相對應(yīng)的當(dāng)然是動態(tài)。我們每天使用的 iOS 系統(tǒng)的框架是以 .framework 結(jié)尾的,它們就是動態(tài)框架。Framework 其實(shí)是一個 bundle,或者說是一個特殊的文件夾。系統(tǒng)的 framework 是存在于系統(tǒng)內(nèi)部,而不會打包進(jìn) app 中。app 的啟動的時候會檢查所需要的動態(tài)框架是否已經(jīng)加載。像 UIKit 之類的常用系統(tǒng)框架一般已經(jīng)在內(nèi)存中,就不需要再次加載,這可以保證 app 啟動速度。相比靜態(tài)庫,framework 是自包含的,你不需要關(guān)心頭文件位置等,使用起來很方便。Universal FrameworkiOS 8 之前也有一些第三方庫提供 .framework 文件,但是它們實(shí)質(zhì)上都是靜態(tài)庫,只不過通過一些方法進(jìn)行了包裝,相比傳統(tǒng)的 .a 要好用一些。像是原來的 Dropbox 和 Facebook 等都使用這種方法來提供 SDK。不過因?yàn)橐呀?jīng)脫離時代,所以在此略過不說。有興趣和需要的朋友可以參看一下這里和這里。Library v.s. Framework對比靜態(tài)庫和動態(tài)框架,后者是有不少優(yōu)勢的。首先,靜態(tài)庫不能包含像 xib 文件,圖片這樣的資源文件,其他開發(fā)者必須將它們復(fù)制到 app 的 main bundle 中才能使用,維護(hù)和更新非常困難;而 framework 則可以將資源文件包含在自己的 bundle 中。 其次,靜態(tài)庫必須打包到二進(jìn)制文件中,這在以前的 iOS 開發(fā)中不是很大的問題。但是隨著 iOS 擴(kuò)展(比如通知中心擴(kuò)展或者 Action 擴(kuò)展)開發(fā)的出現(xiàn),你現(xiàn)在可能需要將同一個 .a 包含在 app 本體以及擴(kuò)展的二進(jìn)制文件中,這是不必要的重復(fù)。最后,靜態(tài)庫只能隨應(yīng)用 binary 一起加載,而動態(tài)框架加載到內(nèi)存后就不需要再次加載,二次啟動速度加快。另外,使用時也可以控制加載時機(jī)。動態(tài)框架有非常多的優(yōu)點(diǎn),但是遺憾的是以前 Apple 不允許第三方框架使用動態(tài)方式,而只有系統(tǒng)框架可以通過動態(tài)方式加載。

一般ios開發(fā)中app框架搭建是怎么樣的?

這個看你需求了,navigation 和 tabbar controller 是可以相互交叉的,你可以參考寫你想做的app的類似線上app。

分享文章:ios開發(fā)框架搭建,ios開發(fā)環(huán)境搭建
URL鏈接:http://vcdvsql.cn/article28/dsdiccp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)搜索引擎優(yōu)化微信小程序電子商務(wù)App開發(fā)全網(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)

微信小程序開發(fā)