qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          第一個公司的iOS項目總結

           第一個正式的universal項目差不多快要結束,總結一下,分享給大家。因為可能我的比較具有代表性,如何從壓根不懂開始做起。(分享的另外一個目的也是希望大家提提建議,畢竟只有互相交流中才能更快成長)
            -----------------------------------------------
            做項目前:
            零面向對象實際項目經驗,更不用說透徹理解design pattern
            零iOS實際項目經驗
            只懂一點點的C和匯編代碼,其它如java、ruby、php、HTML5一點不沾邊,可以說是不屬于互聯網的業余玩家
            項目的情況:
            做項目過程中,客戶需求變化極其頻繁和巨大,對代碼結構的robust是一大挑戰。雖然本人特別討厭需求變動,但是在外,身不由己
            Universal項目,即是iPhone + iPad 的一個項目
            基本上這個項目涉及到了iOS的方方面面,麻雀雖小,但是五臟俱全
            關于程序結構設計
            嘗試用面向對象的方式去設計結構,但設計的時候流于形式,根據現有的一些best practice依葫蘆畫瓢,但實際上只有實踐了才知道,比如:
            1. 屬性: 什么時候用和為什么用屬性、如何保持屬性私有、self.的使用,屬性的內存釋放;
            2. 成員變量和屬性的區別
            3. 方法:什么時候用類方法和對象方法
            4. 好的設計真的是“增之一分則太長,減之一分則太短”;好的設計關系到以后重構的方便性
            5. 解耦設計:對象之間如何通訊,如何傳值,如何回傳,如何用好notification、delegate、KVO;如何保持對象的純潔(不受玷污)
            6. MVC中的M和C分離,一直覺得自己做的項目是小項目,而且一直認為過于注重結構,會增加代碼量,但是實際上項目不分大小,好的設計:
            能隨時應對客戶的需求變化
            能自己看得懂自己寫的代碼(改的多了,都看不懂自己的代碼了,這是最悲催)
            回歸測試,一旦客戶需求改變,亂糟糟的代碼更加亂,這樣回歸基本上是需要全部。好的設計可以把客戶需求改變帶來的回歸測試降低到最低
            關于面向對象設計
            之前從沒有面向對象設計的經驗,所以第一次從這種角度去解決問題。“實踐出真理”,無論你平時看多少書,如果沒有實踐過,真的是無法體會面向對象設計的:
            一切從面向對象出發設計:類、對象、(私有)方法、(私有)屬性
            所謂面向對象,就是根據現實世界中客觀存在的事物(即對象)出發來構造軟件系統
            只有真正從面向對象去設計,幾個月甚至幾年后,你才能復盤你的代碼。以前一直覺得代碼復盤如同圍棋復盤絕對是天才才有的本領,現在才明白,其實關鍵是:你要清楚的知道你的代碼用在了哪里,為什么用
            從面向對象出發,不要覺得一個功能很簡單一個方法就搞定,盡量用面向對象去考慮。這是做項目過程中犯的最大的錯誤
            關于ARC
            我是項目做了1個月后,才決定把項目從MRC轉到ARC,現在回頭看看,當初真實明智,因為在第一個月,內存管理上的問題和處理讓我很頭疼也很花時間。關于ARC
            沒有想象中的會比MRC性能差,ARC不是JAVA的垃圾回收,性能其實與MRC基本一致
            ARC中沒有明確的release操作,這時更需要注意內存管理,比如在一個Controller中使用Gyro sensor的時候,這種操作是絕對不能賦值給局部變量的:[[CMMotionManager alloc]init]
            雖然ARC似乎能為你做很多事,但是有些事情自己解決還是自己解決,比如當不需要用Gyro sensor時,_motionManager = nil(此時如果不設置,則startDeviceMotionUpdatesToQueue中的更新會一直進行);
            總之,對于ARC,難得糊涂中要“時刻保持覺醒”
            關于Perfomrance設計
            Coding真的是一點都來不得馬虎,以前一直覺得iOS性能強大,無須擔心性能,但是項目做下來,一大痛苦之處就是性能不夠:
            應用程序、UIViewController和UIView的生命周期的認識如果不十分清楚,就很容易造成性能瓶頸
            大量的UIView插入移除操作會導致性能問題
            UITableView和UIScrollView導致滑動不順暢的best practice
            關于知識點
            成為一名優秀Programmer需要豐富的經驗和知識面,但是知識永遠是學習不完的,所以要抓核心和基本,個人覺得以下幾個知識點是iOS開發必須的。至于有些比如CoreText、CoreImage等,其實等到需要用時再去學習也來得及。
            內存管理,MRC和ARC
            多線程,iOS下有多種多線程實現方式,什么都應該了解一下,但是除了dispatch需要精通,其它只需要看懂 (dispatch效率最高,使用最方便)
            數據庫,無論是Core Data,FMDB還是基本的Sqlite,萬事不離其中,掌握Sqlite和SQL基本語法是必須的
            UIViewController、UITableViewController 和應用程序的生命周期
            看似簡單但是很有深度的View之間的轉場處理,因為涉及到大量生命周期,如presentModalViewController, presentViewController, pushViewController, addSubview, removeFromSuperview, self.view....
            網絡處理相關的,如何請求JSON數據,如何HTTP GET和POST
            旋轉處理,特別是iOS4、iOS5、iOS6的不同處理
            Debug的能力
            基本的設計模式:MVC、delegate、notification、target-action
            面向對象的核心思想,例如:不要以用戶無法使用或不感興趣的東西擾亂類的公有接口、類之間應該零耦合、把不相關的信息放在另一個類中
            不重復造輪子
            這個也不例外,iOS下的開源framework都太多了,基本上你需要的都能在Github或者Stackoverflow上找得到,所以平時:
            不要做井底之蛙,平時多了解開源的框架
            框架適合就行,就像爭論AFNetwork和ASIHttpNetwork更棒沒有意義的。寫程序的有兩類人,一類人追求技術極致,一類人技術只是實現產品的一種手段,我就是后面這個
            關于開源框架的學習
            這世界好的開源框架太多了,給我10年都看不完,所以需要選擇,就像讀書不在于都多,而在于讀精,個人推薦如下。
            Three20 (其實我是不推薦的,因為它過時了,但是因為淘寶客戶端用到)
            AFNetwork
            MBProgressHUD
            SDWebImage
            關于Continuous Improvement
            Six sigma中提到了持續改進,我們的能力提高也是這樣。通過讀好的開源框架是最好的進步方式。如何讀開源框架,我們讀開源框架的目的:
            其中的花式寫法我們只是了解,不是我們的目的
            了解作者寫框架的思路
            對比自己現有的,求改進
           關于設計模式
            做項目前,把GOF的23種設計模式都看了一遍,項目做下了,體會到:
            單看設計模式的書,純粹是無用;
            設計模式的核心在于平時的有意無意的使用,因為它本身來源于實際;
            能熟背23種設計模式固然是件好事,但是不能也不見得是壞事(反正我是記不住的)
            欲速則不達
            代碼之間往往只查一兩個字符,但性能和結局多半千差萬別,因為項目緊,壓力大,又是第一個項目,所以寫代碼的時候,追求:"meet requirement,先滿足功能,再考慮代碼結構",但是實際:
            需求無論大小,代碼結構設計是必須的而且是第一位的,因為這關系到未來的改動,未來自己能否看懂;
            欲速則不達,真是一個真理
            關于Best Practice的重要
            iOS已經很成熟了,基本上,所有問題都能找到答案,所有的需求都有現成的framework,或者只需要稍許改改。但是也正因為“萬能的internet”,所以很多答案或者很多framework都是有問題的,所以適時總結很重要:
            把常用的代碼或者容易錯的代碼寫到Xcode的snippet中
            要有自己的library,不是自己擺酷,而是知識需要積累,有些開發中經常會遇到的
            用好的framework。不流行的框架要注意是否用了私有方法(蘋果 will reject it)
            best practice,比如如何自定義TableCell,如何自定義Navigation bar
            不玩花的,不玩偏門的,寫代碼就是規規矩矩,一切按照蘋果的best practice寫
            面向對象的思想有很多概要,平時要時刻提醒自己
            關于HTML5
            iOS原生與HTML5 WEB APP天生就是一對敵人,做HTML5的可以不懂iOS開發,但是做iOS開發必須懂點HTML5:
            iOS應用中一些“高度變化”或“性能要求不高”或“上線緊迫”的地方會用到UIWebView
            iOS原生與UIWebView的之間交互其實也可以很棒,甚至JSP交互
            HTML5是“可能”的未來,世界都在談論
            HTML5看似只有一個知識點,但是其實要求比iOS原生開都高:一個典型的移動HTML5頁面 = JSP + HTML + CSS + JQuery + backbone.js?;蛘邔W習PhoneGap也是不錯的注意。
            關于未來:
            如何讓自己在最短的時間內成為優秀,這是每天都在思考的,因為對比別人_大學+工作下來的多年工作經驗,我是不懼任何優勢的,但是既然入行,就必須做優秀。所以選擇值得做的事尤其重要:
            看書沒用,實踐和Coding是提高能力的唯一途徑;
            做實際項目比自己玩玩靠譜十萬倍
            壓力下工作成長更快,所以不斷挑戰自己,人的潛力是無限的
            番茄工作法則比較適合我(每次集中做半個小時)

          posted on 2014-08-12 09:33 順其自然EVO 閱讀(2935) 評論(1)  編輯  收藏 所屬分類: 測試學習專欄

          評論

          # re: 第一個公司的iOS項目總結 2016-04-27 11:15 黑暗中之月

          樓主加油,謝謝分享!  回復  更多評論   

          <2014年8月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 乌拉特中旗| 南安市| 云林县| 平潭县| 垫江县| 遵化市| 钟祥市| 台中市| 无棣县| 秦皇岛市| 白山市| 民乐县| 新源县| 富阳市| 莆田市| 保定市| 朝阳县| 垣曲县| 宁夏| 斗六市| 蒲江县| 张家港市| 府谷县| 胶南市| 曲麻莱县| 社旗县| 长丰县| 梅州市| 襄汾县| 耒阳市| 刚察县| 沂源县| 大埔县| 湟中县| 教育| 兴隆县| 大宁县| 西青区| 吉木萨尔县| 榆中县| 惠水县|