入門呢,先多瞭解下iOS開發的知識樹。樹上有什麼大枝大葉,心裡有個數最好啦。平時多看看書,多和前輩討論技術,就get很多經驗的。選對了位置,再逐步突破不懂的點,之後開始研究一些有深度的領域,一萬小時定理你懂的。
首先推薦一些進階的書籍(不好意思哈,看的不多。):
1.《Objective-C基礎教程》
2.《Objective-C程式設計之道:iOS設計模式解析》
3.《Objective-C高階程式設計(iOS與OSX多執行緒和記憶體管理)》
4.《EffectiveObjective-C》 [機械工業出版社 Effective系列叢書]
5.《iPhone開發祕籍》Erica Sadun著
[注:以上除Effective那本之外,4本都是人民郵電出版社 圖靈叢書系列的]
接著,我再大概羅列下一些技術劃分哈。
初級階段:
就Objective-C而言:
1.Foundation框架、Catagory、KVC、KVO、Protocol、Block、引用計數等基本知識有有所掌握。
2.注意程式碼規範。
iOS開發的通用控制元件而言:
1.UIView方面相關控制元件(UILabel、UIImageView、UIButton、UISlider、UISwitch、UIScrollView(TableView、CollectionView、TextView)、UIWebView、UIWindow、UINavigationBar、UITabBar)。
2.瞭解UIViewController的生命週期,Navigation的堆疊原理等等。
3.千萬別隻用程式碼寫UI或是僅使用Storyboard,把Xib、storyborad搞搞清楚,特別是AutoLayout用好來也很重要,此處補充推薦:Masonry Framework,算是約束方面的語法糖。
4.NSNotifaication、觀察者、代理,都是全域性程式碼事件的必要手段,活用巧用可以進一步解耦程式碼。
5.手勢。UITapGestureRecognizer、UIPanGestureRecognizer、UILongPressGestureRecognizer、UISwipeGestureRecognizer、UIRotationGestureRecognizer。
6.螢幕的旋轉,不多贅述,這個坑要多走走才過的好。
7.原聲導航地圖相關開發,此處不才推薦本人的一篇文章:http://www.jianshu.com/p/72652a93741d
8.檔案管理,Bundle、NSFileManager。
9.資料儲存,UserDefault,KeyChain、NSKeyedArchiver。
10.ARC(工作一年的人最容易背面試的方向,還望反覆揣摩。)
iOS動畫:
1.UIView動畫封裝,此處敲黑板UIAnimation,如果有空,可以看看Lottie,可以支援很多更炫的動畫效果。不過前提是你們公司有AE設計師。
2.Controller 相關的TransitionStyle
3.CAlayer,此處應當敲黑板,因為這部分有很多知識點,面試能夠在UI方向上答到,可以加分。
設計模式:
這部分內容研究,建議拿一些開源企業級框架進行學習。本人當時是哪BeeFramework上手,Bee框架算是很好的MVC模式學習框架了。XML UI + Signal的View構建方式也挺優秀的。不過可惜的是現在Bee已經不再維護了,所以就拿來學習吧。(另外備註:很多公司也推行MVVM模式代表ReactiveCocoa,建議找工作的小夥子們可以看看。)
需要了解的常用設計模式:
1.MVC
2.代理模式
3.單例
4.觀察者
5.工廠模式
單元測試:
1.單元測試基礎原理
2.XCTest
3.Kiwi(此處應當有敲黑板,Kiwi是BDD(行為驅動測試)測試方案。)
開發技術之外的還包括:
1.專案版本管理:SVN、Git (Git的GUI,Mac上推薦Tower)
2.專案包依賴管理:CocoaPods(OC)、SwiftPackage Manager(Swift)
3.除錯各種小技巧。比如斷點(條件、全域性)、lldb除錯基本指令、NSZombieEnabled、
4.一些基本概念的理解,比如程式、執行緒、同步、非同步、佇列、序列、併發。
中級階段。
在這個階段呢,我們應該更多關注效能和業務方面的優化。
開發語言方面:
1.Swift:Objective-C與Swift互調。
2.JavaScript:使用Objective-C執行JavaScript。可以多熟悉瞭解JavaScriptCore。三方框架方面推薦WebViewjavaScriptBridge。
3.C、C++、Objective-C混編。
iOS方面:
1.動畫上熟悉CAAnimation(CABasicAnimation、CAKeyFrameAnimation、CAAnimationgroup\CATransition)、UIDynamics(UIDynamicAnimator、UIDynamicBehavior)
2.Runtime:objc_msgSend、Method Swizzling;
3.正規表示式:NSpredicate、NSRegularExpression。
4.訊息推送機制
5.元件開發:建立Framework、打包靜態庫
6.分清32位和64位編譯區別,能夠將32位程式遷移到64位(這部分,,,,不強求)。
多媒體:
VLC元件使用頻率較高,但其中部分不需要的解碼庫可以適當的剝除以降低庫大小,SDWebImage可以細緻的去研究他的載入策略快取策略。CoreAudio、COreGraphics能夠排程硬體進行編解碼,提升效率多半是Android一時半會達不到的。
1.視訊:MediaPlayer、AVPlayer、VLCPlayer、AVFoundation
2.圖片:CoreGraphics、SDWebImage、CoreImage
3.音訊:CoreAudio
4.應用外重要的影象處理框架:GPUImage,你如果想進個眼下很火的拍照、短視訊相關開發的公司,建議深入研究這個開源庫。此處推薦我的Git倉庫:https://github.com/filelife
網路互動:
此處應該毋庸置疑推薦研究AFNetworking(2.0、3.0)兩個版本,先會用,之後開始學著封裝抽象。
1.NSStream
2.NSURLconnection
3.NSURLSession
4.Json解析(model資料接收導致崩潰,多半在Json解析。)
應用測試:
還在為應用莫名其妙卡殼而苦惱嗎,還在為找不到專案優化點而被產品同批嗎?Instrument——你值得擁有。
1.效能測試:instrument(Timer、Allocation、Leak)
2.Fabric :上線應用的崩潰、使用者操作採集統計平臺。一般,你一個人開發,,用不到這個,你就蠻看看吧。
開發環境與工程框架(個人覺得也是中後期關注比較多的點)
工程框架
1.包依賴管理:Cocoapods、SwiftPackageManager、Carthage。如果你為了新增一個依賴庫,還在手動從Git上面下載,那麼就該注意去使用這些包管理工具了。提高效率很多,並且方便團隊開發時,快速構建專案框架。(注:如果你是從ObjectiveC入手,那麼推薦你自己嘗試推一個Podspec,完成自己的第一個遠端Cocoapods倉庫。)
2.持續整合:Jenkins。首先,你先發現了自己在開發過程中對於持續整合的需求,並且發現真的很累...那麼此時你就該認真的思考如何通過工具完成這一煩躁的工作了。
3.資料安全:
3.1資料加密:Hash(MD5、SHA1、SHA265)、RSA、AES、3DES、Base63.
3.2HTTPS與SSL:做開發,必須要學會跳過HTTPS授權,iOS也不例外。
4.打包工具:Jenkins、Command Line Tools、Xctool
5.使用者行為監控,崩潰日誌手機:Fabric、Umeng
開發環境
1.git:SourceTree、Tower(強烈推薦Tower,速度比ST快多了。)
2.SVN:Versions、Cornerstone。(講真Versions比Cornerstone好用。)
3.開發者賬號申請和管理:
3.1Apple Developer MemberCenter :證照(釋出證照、開發證照、推送證照)、裝置管理、配置檔案管理(不差錢就花99刀買一個開發者賬號吧)
3.2iTurnes Connect:Appstore應用管理、應用上架稽核檢測、加急稽核。
5.熱門技術:
5.1支付:微信支付、支付寶支付
5.2分享:微博、微信朋友圈等
5.3即時通訊:XMPP、VoIP(不知道放這裡合不合適哈,做過視訊會議,網路電話的人都懂。)
5.4混合應用開發:ReactNative,此處建議在完成OC學習之後進行,部分公司有需求。
以上列出的大部分內容來自於日常開發,還有書本閱讀,也有部分的內容來自於平時和前輩討(xia)論(che)時談到的一些技術點,都會倉鼠心態的將其收入筆記中,閒暇時候整理成知識點再逐個學習瞭解。
個人比較相信一萬小時原則,多碼新鮮的程式碼多半不會錯的,但學習的同時也多調整方向。