iOS開發(fā)技術(shù)棧與進(jìn)階

最近有一些開發(fā)朋友問我應(yīng)該怎樣提升自己的能力,回想起來做了這么久 iOS 開發(fā),我也有過那種“讓我做一個(gè)功能實(shí)現(xiàn)個(gè)需求我會(huì)做,但接下來怎樣提高我不知道?!钡臅r(shí)期,這里嘗試列一下 iOS 開發(fā)的相關(guān)技術(shù),再說說在學(xué)習(xí)進(jìn)階上我的一些想法。

創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的修文網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

iOS 技術(shù)棧

這里按我的理解給 iOS 相關(guān)技術(shù)分個(gè)類,以工程實(shí)現(xiàn)的角度,分成了基礎(chǔ)、需求、效率、質(zhì)量四個(gè)類別?;A(chǔ)指程序開發(fā)和 iOS 開發(fā)的基礎(chǔ)知識(shí)和技能,需求就是產(chǎn)品的需求,有了基礎(chǔ)技能,實(shí)現(xiàn)了產(chǎn)品需求后,剩下的事情就都是為了提高項(xiàng)目質(zhì)量和提升開發(fā)效率。

大致的思維導(dǎo)圖:

iOS 開發(fā)技術(shù)棧與進(jìn)階

基礎(chǔ)

基礎(chǔ)包括語言、框架、內(nèi)存、網(wǎng)絡(luò)、存儲(chǔ)、渲染、線程。

語言目前 iOS 開發(fā)就是 OC 和 Swift,國(guó)內(nèi)仍以 OC 為主,對(duì)于 OC 除了語法外,最好了解它的對(duì)象模型,動(dòng)態(tài)機(jī)制等特性。Swift 方面若要在團(tuán)隊(duì)里使用,目前還是風(fēng)險(xiǎn)大收益小的,但個(gè)人最好保持對(duì)它的關(guān)注。

框架就是 Foundation / UIKit 以及蘋果系統(tǒng)封裝好的各種框架,F(xiàn)oundation 和 UIKit 每個(gè)做 iOS 開發(fā)的人都熟知這套,iOS 功能越來越多,蘋果提供的框架也越來越多,像 StoreKit / MessageUI / AVFoundation 等可以在使用到再去了解。

接著是客戶端里最常見流程里的四個(gè)關(guān)鍵部分:從網(wǎng)絡(luò)拉取數(shù)據(jù),存儲(chǔ)到本地文件系統(tǒng),再?gòu)谋镜厝〕鰜矸胚M(jìn)內(nèi)存,最后渲染出來。而這里所有的處理都在操作系統(tǒng)的進(jìn)程和線程中執(zhí)行。

網(wǎng)絡(luò)方面若要深入的話內(nèi)容很多,客戶端一般只需要關(guān)心 http / https / DNS 這幾個(gè)協(xié)議,了解 https 的原理,處理運(yùn)營(yíng)商劫持 dns 劫持等情況,另外需要處理好各種異常情況做好重試機(jī)制,iOS 作為移動(dòng)端網(wǎng)絡(luò)不穩(wěn)定,要看情況優(yōu)化弱網(wǎng)絡(luò)下的連接,做好離線機(jī)制,以及注意避免耗費(fèi)太多流量。還有客戶端跟后臺(tái)的通信協(xié)議,數(shù)據(jù)結(jié)構(gòu)一般用 json 或 protobuf,由于客戶端本地會(huì)保存一部分內(nèi)容,很多 APP 都會(huì)需要做數(shù)據(jù)的增量更新。

存儲(chǔ)方面主要是 sqlite,sqlite 作為存儲(chǔ)引擎是大多數(shù) APP 的核心,也是性能優(yōu)化的關(guān)鍵點(diǎn),最基本的需要知道主鍵索引事務(wù)等數(shù)據(jù)庫基本概念,再深入需要了解具體的存儲(chǔ)機(jī)制/索引的實(shí)現(xiàn)/sqlite的七層結(jié)構(gòu)等,才能在遇到問題時(shí)找到最佳的解決方案??蛻舳松?NOSQL 用得較少,除了 sqlite 一般就剩單文件存儲(chǔ),XML存文件或?qū)ο笮蛄谢啥M(jìn)制存儲(chǔ),也是常用的存儲(chǔ)方式,近期有 realm 這種新型數(shù)據(jù)庫,也值得了解一下。

內(nèi)存方面,需要了解 OC 的引用計(jì)數(shù)、 ARC 機(jī)制、自動(dòng)釋放池等相關(guān)點(diǎn),最好其他語言的垃圾回收機(jī)制也有所了解,另外需要注意避免內(nèi)存泄露,管理好客戶端的緩存,避免緩存太多導(dǎo)致OOM,或緩存命中率太低性能低下。

渲染方面主要是文字和圖像,基礎(chǔ)上文字方面 UIKit 已封裝得很好,CoreText也提供了更自由的排版渲染方式,圖像渲染只需要注意解壓時(shí)機(jī),再深入需要了解 iOS 具體的渲染機(jī)制,像圖層混合,渲染時(shí)機(jī),離屏渲染等,才好做更多的優(yōu)化。

線程和進(jìn)程方面,iOS 開發(fā)只在做 Extension 時(shí)才需要考慮到進(jìn)程,一般只需處理好線程,需要了解主線程子線程,多線程并發(fā)鎖競(jìng)爭(zhēng),死鎖,GCD,Runloop 等知識(shí)點(diǎn)。

  • iOS開發(fā)生態(tài)交流技術(shù)群:679884541,不管你是小白還是大牛歡迎入駐 ,分享BAT,阿里面試題、面試經(jīng)驗(yàn),討論技術(shù), 大家一起交流學(xué)習(xí)成長(zhǎng)!
  • (直接搜索或點(diǎn)擊群號(hào):679884541?快速入群)

需求

需求方面姑且概括為普通需求、特殊需求和運(yùn)營(yíng)需求。

普通需求就是上面提到的網(wǎng)絡(luò)拉數(shù)據(jù)->存儲(chǔ)->讀取->展示,大多數(shù) APP 主要都是在實(shí)現(xiàn)這類需求,熟悉上述的基礎(chǔ)知識(shí)后就能輕易實(shí)現(xiàn)。

特殊需求是指一些特定 APP 的需求,像瀏覽器內(nèi)核,文字排版引擎,音視頻和圖像處理引擎,圖標(biāo)繪制引擎等,要求較高,都需要在相關(guān)領(lǐng)域里較深入的鉆研才能做好。

運(yùn)營(yíng)需求是 APP 上線后持續(xù)運(yùn)營(yíng)過程中的需求,包括功能動(dòng)態(tài)化,可以隨時(shí)增刪改線上的功能,一般這塊由內(nèi)嵌 web 承擔(dān)。配置系統(tǒng)也算動(dòng)態(tài)化的一種,可以通過各種開關(guān)控制展現(xiàn)的功能。統(tǒng)計(jì)系統(tǒng)記錄 APP 各項(xiàng)運(yùn)營(yíng)數(shù)據(jù),包括用戶增長(zhǎng)情況,留存率,功能使用情況等。事件流可以清楚看到用戶在 APP 里的使用流程。有些 APP 還會(huì)開發(fā)推薦系統(tǒng),根據(jù)收集來的數(shù)據(jù)給不同用戶推送不同內(nèi)容,提高用戶轉(zhuǎn)化率等。

質(zhì)量

越大的 APP 會(huì)花越多的精力在保證和提高 APP 質(zhì)量上,包括性能優(yōu)化,搭建監(jiān)控體系,提升代碼質(zhì)量,保證安全,以及通過測(cè)試保證質(zhì)量。

性能優(yōu)化范圍很大,在網(wǎng)絡(luò)/存儲(chǔ)/內(nèi)存/渲染/算法各方面都有優(yōu)化的可能,一般性能上的優(yōu)化可以分成三步走,一是檢測(cè)各方面的數(shù)據(jù),量化運(yùn)行性能,二是從中找到性能瓶頸,三是找辦法優(yōu)化,用第一步的數(shù)據(jù)驗(yàn)證優(yōu)化效果。

監(jiān)控體系在面向大眾用戶的產(chǎn)品里無論是前端后端一直都是非常重要的,你需要時(shí)刻知道用戶在使用你的產(chǎn)品過程中有沒有發(fā)生什么問題,讓你的 APP 處于可知可控狀態(tài),客戶端最常見的監(jiān)控點(diǎn)是 crash,這個(gè)無需多說,另外一般對(duì)于 APP 里的錯(cuò)誤碼,包括本地錯(cuò)誤、網(wǎng)絡(luò)錯(cuò)誤等都需要監(jiān)控起來,這樣在出現(xiàn)異常時(shí)才能即時(shí)得知進(jìn)行處理。其他通用的監(jiān)控包括卡頓監(jiān)控、數(shù)據(jù)庫監(jiān)控、流量消耗監(jiān)控、內(nèi)存消耗監(jiān)控、各種耗時(shí)監(jiān)控等等,還有各類業(yè)務(wù)相關(guān)的監(jiān)控,越大的 APP 監(jiān)控的項(xiàng)目就越多越細(xì)致,目的都是及時(shí)發(fā)現(xiàn)問題,以及衡量 APP 的質(zhì)量。除了監(jiān)控問題外,這里還需要做好出錯(cuò)時(shí)的補(bǔ)救措施,可以通過預(yù)埋功能開關(guān)配置或接入熱修復(fù)的庫去做。

安全方面,客戶端上安全的分量相對(duì)于服務(wù)端是少很多,尤其是在 iOS 系統(tǒng)沙盒機(jī)制的保護(hù)下,本身已經(jīng)比較安全,最需要注意的是網(wǎng)絡(luò)傳輸?shù)陌踩?,避免網(wǎng)絡(luò)傳輸內(nèi)容被篡改,或泄露了用戶名密碼等敏感信息。對(duì)于代碼里有機(jī)密信息的可以考慮混淆代碼對(duì) APP 進(jìn)行加固,減少被破解的概率。

代碼質(zhì)量主要存在于團(tuán)隊(duì)協(xié)作上,一般團(tuán)隊(duì)都會(huì)定義代碼規(guī)范,讓大家的代碼風(fēng)格趨于一致,有些會(huì)開發(fā)代碼規(guī)范檢測(cè)工具,確保提交的代碼遵循代碼規(guī)范。另外很多團(tuán)隊(duì)都會(huì)實(shí)行 code review 機(jī)制,互相查看代碼,減少臟亂差代碼出現(xiàn)的概率,具體 review 機(jī)制各有不同。

測(cè)試是一個(gè)專業(yè),國(guó)內(nèi)終端產(chǎn)品因?yàn)榈欤R姷氖呛诤袦y(cè)試,雖然不能保證無問題,但成本低效率高,部分穩(wěn)定的核心功能會(huì)做單元測(cè)試,也有一些團(tuán)隊(duì)所有業(yè)務(wù)功能都做自動(dòng)化測(cè)試的。

效率

客戶端的架構(gòu)可以說都是為了提高開發(fā)協(xié)作效率,因?yàn)楣δ芸梢杂煤芏喾N方法實(shí)現(xiàn),可以不需要什么架構(gòu),無論是大型還是小型 APP 都可以按一套來實(shí)現(xiàn),只不過差的架構(gòu)在中大型 APP 上代碼會(huì)很混亂,導(dǎo)致在開發(fā)/協(xié)作/debug上效率會(huì)越來越低,好的架構(gòu)則會(huì)提升這里的效率。大多數(shù)架構(gòu)都是分層抽象和解耦,把功能獨(dú)立的組件抽離出來,業(yè)務(wù)模塊化,分層職責(zé)清晰,互相不耦合。只要分層抽象和解耦做得足夠好,無論多大的 APP 都是很多小模塊的拼接,就可以降低復(fù)雜度,提高開發(fā)效率。但有時(shí)解耦會(huì)帶來通信的麻煩,抽象也有粒度大小的問題,這些都需要根據(jù)具體情況權(quán)衡。業(yè)界有各種各樣的架構(gòu)模式可供參考,像 MVC / MVVM / MVP / VIPER 等。除了解耦和抽象,還有一些改變編方式的架構(gòu),像響應(yīng)式編程,單向數(shù)據(jù)流等。

持續(xù)集成的意思是不斷把每個(gè)人做的東西(代碼/資源等)集成到一起輸出成品,進(jìn)行自動(dòng)化構(gòu)建,其中涉及代碼管理(git / svn),編譯流程,證書和簽名機(jī)制,自動(dòng)化測(cè)試,打包發(fā)布等。其中還會(huì)有一些自定義的自動(dòng)化流程,例如自動(dòng)生成代碼,根據(jù) debug / release 包類型自動(dòng)更改配置等,重復(fù)做的事都應(yīng)該自動(dòng)化,以提高開發(fā)效率。

業(yè)界為了提升開發(fā)效率,跨平臺(tái)開發(fā)一直是大家孜孜不倦追求的目標(biāo)。終端上跨平臺(tái)愿望是只開發(fā)一次,就能完美運(yùn)行在 Android 和 iOS 上,業(yè)界有很多嘗試,這篇文章總結(jié)得比較全,總的來說目前最好的跨平臺(tái)方案就是 web (H5),代價(jià)是性能略低。

進(jìn)階

列完 iOS 開發(fā)的相關(guān)知識(shí)點(diǎn),接下來說說怎樣學(xué)習(xí)提高。

如果自學(xué)能力強(qiáng)的話,不需要多說,上述每個(gè)點(diǎn)網(wǎng)上都有大量資料,像內(nèi)存網(wǎng)絡(luò)存儲(chǔ)這些計(jì)算機(jī)基礎(chǔ)知識(shí)也有經(jīng)典的書籍,一個(gè)個(gè)啃下去就行了,只要理解得足夠深入,就已經(jīng)可以成為領(lǐng)域里的專家,并很容易觸類旁通。

但這種學(xué)習(xí)方法會(huì)比較枯燥,也難以實(shí)踐,個(gè)人還是比較推薦在實(shí)踐中學(xué)習(xí),具體來說就是在平時(shí)開發(fā)過程中不斷地發(fā)現(xiàn)問題 -> 解決問題

發(fā)現(xiàn)問題

首先你最好處在一個(gè)有很多工程上的問題急需解決的環(huán)境里,這樣發(fā)現(xiàn)問題就很容易,最好的是處于這幾類項(xiàng)目里:

  1. 處于高速發(fā)展期的項(xiàng)目。增長(zhǎng)會(huì)帶來很多問題,一切又未成熟,解決這些問題是非常自然又有價(jià)值的。
  2. 龐大的項(xiàng)目,超級(jí)APP會(huì)帶來很多中小型APP沒有遇到過的問題,又因?yàn)轶w量大,就算只有千分之一的人遇到也會(huì)影響幾十萬人,很有解決的價(jià)值,會(huì)有很多細(xì)致的問題。
  3. 像上面提到的有“特殊需求”一類的項(xiàng)目,需要在一個(gè)領(lǐng)域里深入研究,也會(huì)自然碰到很多問題。

如果恰巧沒有在這三種類型的項(xiàng)目里,也沒關(guān)系,只要是健康發(fā)展的項(xiàng)目,總會(huì)存在問題和優(yōu)化空間,只是要培養(yǎng)發(fā)現(xiàn)問題的意識(shí),很多時(shí)候問題就在那里,但沒人發(fā)現(xiàn)它,沒人覺得它可以/應(yīng)該解決??梢园瓷鲜隽械狞c(diǎn),在相關(guān)點(diǎn)上多問自己能不能提高效率和質(zhì)量,例如能不能提高前后臺(tái)聯(lián)調(diào)效率,重復(fù)寫的代碼能不能自動(dòng)生成,啟動(dòng)耗時(shí)能不能短一點(diǎn),線上問題發(fā)現(xiàn)和排查的效率能不能提高等等。各種問題會(huì)涵蓋上述提到的所有知識(shí)點(diǎn)。

如果不幸你的項(xiàng)目沒有健康發(fā)展,實(shí)在沒碰到什么問題或者問題不值得解決,或者你還沒畢業(yè),那這里還有一個(gè)萬能問題可供參考:那些知名的開源項(xiàng)目具體是怎樣實(shí)現(xiàn)的?剖析開源項(xiàng)目源碼可以學(xué)到很多東西,各種各樣的開源項(xiàng)目也覆蓋了很多知識(shí)面,只要深入去研究它們,學(xué)習(xí)它的架構(gòu)和編碼,不懂的地方再去補(bǔ)齊知識(shí),也是個(gè)很好的學(xué)習(xí)方式,如果學(xué)習(xí)后能輸出文章效果會(huì)更好,相當(dāng)于動(dòng)手實(shí)踐了。

解決問題

不同的解決問題的方式差別很大,有一些常見的套路可供參考:

1. 業(yè)界是怎樣解決這個(gè)問題的?他們的方案有什么不足?我怎樣可以做得更好?
業(yè)界有各種各樣的開源庫和技術(shù)分享,只要問題不是太偏門,大多會(huì)有人已經(jīng)提出解決方案,多對(duì)比和研究這些已有的方案,看它們是否能滿足需求,找出它們的優(yōu)點(diǎn)和不足,看看能不能做得比它們更好或更適合解決碰到的問題。

2.解決方案能否通用化,封裝成開源庫供其他項(xiàng)目使用?
開源項(xiàng)目都是這樣來的,如果遇到一個(gè)別人沒解決好的問題,別錯(cuò)過封裝成開源庫造福社會(huì)。

3.有沒有辦法防止以后出現(xiàn)類似的問題?
有些問題可能會(huì)反復(fù)出現(xiàn),能不能防止,或者能不能在出現(xiàn)問題的時(shí)候能及時(shí)發(fā)現(xiàn)和修復(fù),這可能涉及到開發(fā)流程、自動(dòng)化和監(jiān)控體系等方面的完善。

4.總結(jié)沉淀
能不能總結(jié)出解決這類問題的方法論(套路)?最好能輸出文章或分享,寫的過程是很好的學(xué)習(xí)過程,因?yàn)橐言灸:南敕ǘ记逦乇磉_(dá)出來,迫使自己去整理思路。

  • iOS開發(fā)生態(tài)交流技術(shù)群:679884541,不管你是小白還是大牛歡迎入駐 ,分享BAT,阿里面試題、面試經(jīng)驗(yàn),討論技術(shù), 大家一起交流學(xué)習(xí)成長(zhǎng)!
  • (直接搜索或點(diǎn)擊群號(hào):679884541?快速入群)

總結(jié)

這里按我的理解列了 iOS 相關(guān)技術(shù)點(diǎn),以及在實(shí)踐中提升能力的一點(diǎn)小建議,可能無法各方面都覆蓋到,只是作為一個(gè)參考。另外這里只局限在 iOS 開發(fā)上,實(shí)際上作為程序員不應(yīng)該限制自己學(xué)習(xí)的范圍,有時(shí)間多去了解后端/前端/運(yùn)維也會(huì)很有利于自身開發(fā)能力的提高。

網(wǎng)頁名稱:iOS開發(fā)技術(shù)棧與進(jìn)階
文章位置:http://bm7419.com/article40/iihsho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、網(wǎng)站內(nèi)鏈、面包屑導(dǎo)航、小程序開發(fā)、網(wǎng)站維護(hù)、建站公司

廣告

聲明:本網(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í)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作