最近入職了新公司农曲,刷新我從業(yè)以后對于iOS代碼的觀念社搅。從項目設(shè)計模式的框架、代碼量乳规、內(nèi)存管理罚渐,耦合度等等都見識了技術(shù)層面的下限(也許是我見識淺薄??)。故此總結(jié)一下驯妄,自警避免重蹈覆轍荷并。
項目介紹
項目是非常規(guī)功能性App,個人理解老板的愿景是構(gòu)建一個物聯(lián)網(wǎng)平臺青扔,后期可以應(yīng)用到寫字樓顯示屏以及用戶個人設(shè)備上源织,實現(xiàn)天氣翩伪、交通、股票谈息、購物等等各種民生服務(wù)可視化缘屹。首頁為地圖背景,由后臺返回環(huán)境元素素材侠仇,模擬用戶周邊環(huán)境轻姿,機器人問答檢索用戶輸入信息并反饋。
代碼槽點
最讓我驚詫的“無”設(shè)計模式
項目結(jié)構(gòu)主要是一個主控制器逻炊,不同頁面以新建UIView
類頁面(個人理解應(yīng)該以childVC形式)互亮,且只有兩個分頁面的模型。也就代表主控制器承載了數(shù)據(jù)解析余素、邏輯判斷豹休、事件監(jiān)測等所有任務(wù),數(shù)據(jù)的輸入輸出大部分也是以字典關(guān)鍵詞進(jìn)行索引桨吊。
堅持就是勝利的代碼量
主頁面有一萬五千行代碼威根,其余分視圖也有幾百到幾千行代碼不等,一個方法幾千行代碼视乐,一個if判斷跨越幾百行代碼洛搀,if判斷一個套一個,連綿不絕佑淀。
隨遇而安的內(nèi)存管理
內(nèi)存管理雜亂無章姥卢,很多block隨機self
弱引用(部分是局部變量的block),大部分頁面沒有delloc
方法的釋放處理渣聚。最主要的問題是AFN沒有采用單例模式独榴,導(dǎo)致大量的內(nèi)存泄露(經(jīng)過幾天排查以及查資料才找到)。
設(shè)備適配靠慧眼
視圖的適配基本是寫死的固定數(shù)值奕枝,以及復(fù)雜的系數(shù)乘除法棺榔。使用Masonry也基本是固定數(shù)值,且大量約束沖突隘道。
冗余余余余余余代碼
所有頁面伴隨大量冗余代碼症歇,譬如氣泡元素十?dāng)?shù)個挨個創(chuàng)建和約束,難道一個for循環(huán)不香嗎谭梗????♀?忘晤,再比如一段局部代碼,在一個文件內(nèi)重復(fù)N次激捏,復(fù)制和單寫一個方法一行代碼解決哪個更簡單设塔????♀?
千絲萬縷的耦合度
文件內(nèi)充斥大量的無參方法和巨量的全局變量,以及視圖之間互相引用(更甚之远舅,該頁面的邏輯會寫到其他頁面中)
重復(fù)啰嗦的幫助類
估計該項目應(yīng)該經(jīng)過多人手闰蛔,大量命名不規(guī)范且無法復(fù)用的幫助類痕钢。單一功能性的擴展(我真害怕有runtime置換個原生方法,那就欲哭無淚了)序六。項目目錄也很雜亂任连,幫助類隨意放置。
這一次真的是刷新iOS從業(yè)以來的技術(shù)認(rèn)知下限例诀,但是也是警醒自己在項目框架以及細(xì)節(jié)處理上要吸收經(jīng)驗随抠,避免自己的代碼被人接手后大喊傻逼。代碼這東西很抽象繁涂,可能真正踩過坑拱她,才會意識到代碼規(guī)范和架構(gòu)的重要性。入職至今將近一個月爆土,老板不斷地催促開發(fā)新功能,舊代碼也并沒有完全理順诸蚕,但也是一個成長的過程步势,以此記錄和總結(jié)。