對本職業見解
16年我嘗試加入各類iOS開發交流羣,羣裏的氣氛大體就是:學什麼iOS,iOS完了,OC完了.羣裏大體三種人:誰有企業開發證書,馬甲包瞭解一下,iOS某網課推廣.至今,大部分iOS開發羣還都是僅供吹水用,偶爾能遇見幾個好心人解決一下問題.html
我的觀點
我的觀點:iOS開發這個職業,不是別人說完就完的,那些說完了的人都是由於技術菜,沒有權威性,不想一想本身爲何菜,爲何沒有和唐巧王巍在一個高度,由於菜.前端
尚未到達一個高度就輕易否認一個職業,註定被這個職業淘汰.python
因此,無視掉這種人這麼荒謬的觀點,那些真正有技術,懂得學習的iOS高級開發工程師,如今正在各大企業(騰訊百度阿里等),一句話,不要有比上不足比下有餘的態度.努力學習.ios
真正會學習的人,不會說iOS完了,而是想着如何提高本身,你想一想,真正牛逼的人,真的只會iOS開發這一種嗎?程序員
學習方法
面對有難度的功能,不要忙着拒絕,而是挑戰一下,學習更多知識.面試
儘可能獨立解決問題,而不是在遇到問題的第一想法是找人.算法
多學習別人開源的第三方庫,可以開源的庫必定有值得學習的地方,多去看別的大神的博客.數據庫
做爲一個程序員,若是你中止了學習,你也必將會被這個團隊淘汰.設計模式
要把學習的技能當作興趣,而不是爲了掙錢去學習,是爲了學習技能而學習.瀏覽器
有給本身定製一個詳細的職業規劃和人生規劃,大到5~10年,小到近3年(而且細化到月)的計劃.
不要盲目的面試,要針對即將面試的工做,準備面試.
首先針對一個本身沒有接觸到的知識,先使用 百度\谷歌等網站搜索資料.而後進行學習
這是個好東西,我勸你多用用https://developer.apple.com/search/
嘗試寫一個demo,對新技術進行熟悉.
若是市面上有成熟的Demo或者第三方庫,下載下來進行學習.
在熟悉的過程當中,遇到了任何問題,再進行百度/谷歌,學習不一樣人的不一樣見解和解決方法.
職業規劃
我的觀點
首先是針對iOS這個行業,找不到工做要從自身找緣由,爲何本身沒有大公司的工做經歷,爲何大公司會把本身斃掉,由於實力不夠,由於你菜,你不夠強.要從自身找緣由,是,培訓機構一陣子培訓了一堆iOS開發工程師,但你不能從特麼一堆菜鳥中殺出去,你就是菜鳥,不要怨天尤人了,好好努力學習.
不要只作到鶴立雞羣,而想着怎麼離開這羣雞,重歸鶴羣.
針對程序員行業,這是一個須要努力奮鬥的行業,也許他並不須要你有多高的文憑,好的文憑能夠去大公司工做,沒有好的文憑,但擁有豐富的工做經驗,和開源庫,也會是你本人實力的體現.因此,努力學習,路是本身走出來的,原地踏步誰也救不了你.
職業規劃通常分爲兩種,橫向和縱向,程序員行業橫向走項目經理提成得到分成,縱向發展成爲技術經理,必要時能夠自行創業
產品公司&外包公司
外包公司與產品公司有什麼區別呢,本質上的區別就是,模式不一樣。產品公司針對的是本身的產品,如何升級迭代作到更好,擁有更多的用戶流量,如何設計功能進行盈利。而外包公司針對的是客戶,項目經理每每會和銷售談妥一件件生意,隔一段時間開一個產品會議,使得開發部門,人手幾個項目一塊兒開發。這兩種模式也是各有利弊。
先說外包公司的模式吧,一個好的外包公司,可能福利會好不少,階級鬥爭不是很明顯,你們就像打工的同樣,拿着工資和項目提成,項目比較緊,成熟的外包公司擁有統一化的管理,和優秀的代碼規範;
但若是是比較差的外包公司,那就不同了,總體項目以完成爲目的,不須要維護,每每只須要作出來一個雛形,不會處處崩潰,交貨以後,此app將再也沒有關係,若是須要維護,就再交錢。不論好與壞的外包公司,他的盈利模式就像是流水線,只須要出貨量,不要求質量。這對於剛剛步入程序員行列的人會很不利,會養成不用維護,不用注重用戶體驗,不用作流暢度,耗電量,併發量的測試的壞習慣,得過且過。
總之不用考慮太多。這也是市面上大公司有些會看你以前的工做經歷的緣由,若是是外包,對不起,咱們不要。
產品公司的模式,就是升職加薪,幹得越久福利越好,萬一你比較幸運,有幸成爲將來幾年要火的產品的開發者,那就是offer不斷啊。產品公司每每分爲有成品項目和創業兩種。
成品項目人員變更通常較少,階級鬥爭比較嚴重,爲了職位更上一層樓,勾心鬥角。不過在開發團隊仍是比較罕見的,你們大部分都是想跳槽的。
創業公司每每須要人才,全面性的人才,就單單說iOS,一個創業公司可能會要求你會 直播,支付,藍牙,聊天,這也都是老功能了,如今都是什麼 AR啊 人臉識別啊。你不學習新知識,註定被淘汰。外包公司也有一點好處就是,涉及的應用多,那功能也就天然而然比較多(若是所有接的那種簡單的應用當我沒說)。
作一個負責任的開發者
那麼如今說正題,如何成爲負責任的開發者?
首先要負責,對本身的項目負責。若是是本身新開的項目,要保證隨時都能清晰的想到項目當中每一個地方是怎麼實現的,測試或者用戶反饋了問題之後,能立馬想到可能的錯誤緣由。
若是是接手的項目,就要儘快去了解主要的界面和功能是如何實現的。你只有先作好本身份內的事,纔有機會去顧暇別人的事。
1.保持一個良好的代碼規範以及文件架構。
2.天天要給本身作一個TodoList 和一個BugList,時刻保持本身是在有效率的工做,嚴重的須要時間修復的bug彙報上去,小bug本身記下來偷偷修復。
3.有空時將排行榜上的應用下載排名靠前的應用,去欣賞並分析主流app的界面,功能實現,在拿到設計圖時,去考慮界面的合理性,功能怎麼實現最符合用戶的操做習慣。
4.要有必定的協調能力,交流能力,稍微瞭解一點後臺知識以及前端知識。
5.信念,一個不作初級iOS開發的信念。多去了解,不會被別人當小白,學多少都是本身的,至於在你去學習的時候,有人會說風言風語,這就是區別,他們活該初級,本身不會的東西,也看不慣別人去學習。因此,必定要有一個規劃,按照本身正確的規劃去學習,去成長,別原地踏步。
關於後臺你須要懂什麼呢,如何設計接口文檔,接口怎麼設計合理,後臺拿到你請求的數據是怎麼存儲的,你須要的數據後臺又是怎麼查詢給你的,請求方式何時用get何時適合post,JSON格式的數據以及XML數據又有什麼好處。
關於前端你須要瞭解什麼呢,這裏大體提一下H5和app交互,好比H5怎麼調你的方法,你怎麼調H5的方法,數據如何傳遞,圖片如何交給H5顯示,這些都須要去了解。
有些人會以爲,我上面說的這都是廢話,或者說你知道有什麼用嗎,又沒你提意見的資格。iOS的羣廣泛是什麼風氣,就是你提出來一個建議或者意見,若是路人甲會,他就趾高氣昂懟你一頓,若是他不會,他就會說,會這個又沒用,懂這麼多又沒用什麼的bulabulabula。這就是第五點。
若是你想變強,那就作點什麼.
iOS開發學習路線
iOS定位
-
iOS定位
- 簡介:這裏的定位,僅僅表明我我的意見,僅符合本筆記如何學習從哪裏開始學習,怎麼去學習來講.
- 還沒有入門
- 如何判斷本身是否入門
- 是否瞭解Objective-C
- 是否會使用UI控件.
- 若是上面的都不瞭解,那說明你尚未入門,請從iOS學習路線開始學習.
- 初級iOS開發
- 說明:做爲一名初級的iOS開發,你須要具有如下技能
- 必備技能(所有都會的狀況下查看下一項)
- 如何判斷是否能夠升階
- 是否瞭解AFNetworking 的實現原理
- 是否瞭解SDAutolayout/Masonry 一種佈局庫的原理
- 是否可以處理基本的iOS崩潰緣由/沒法編譯緣由/沒法上架緣由?
- 是否擁有了必定的工做效率,穩定的工做效率.(而不是說,上面派了一個活下來,忙都忙不完,每天加班,還一堆bug)
- 是否可以處理第三方庫引發的崩潰.
- 是否能夠很好的融入工做環境,完成每一階段的工做指標,而不會讓本身疲憊不堪.
- 結論
- iOS中級開發說白了,就是你學會了基本的UI界面搭建,上架,沉澱一段時間,你以爲本身還適合這門行業,還適合,還能接受 這個所謂的iOS開發工程師的行業.你就能夠說是一名中級iOS開發.
- 這個沉澱時間 大約在1年的實際工做中,就能夠完成.
- 若是你以爲這門行業不適合你,請仔細結合自身狀況,是否轉另外一門計算機語言,仍是完全轉行.
- 中級iOS開發
- 說明:做爲一名中級的iOS開發,你須要具有如下技能
- 必備技能(所有都會的狀況下查看下一項)
- 應用的內存處理
- 應用的推送處理
- 應用的模塊化/單元測試
- 應用的第三方集成/集中化管理/穩定迭代
- 閱讀強大的第三方源碼/擁有快速上手新的第三方庫的能力.
- 可以接受各類新功能的開發(這裏是指,即便你沒有作過,可是你仍然能夠憑藉着學習,解決任何業務需求:例如:藍牙.AR.攝像頭.硬件交互.等)
- 清楚明白數據的傳遞方式,應用與後臺如何交換數據,交換數據的過程,結果,格式.
- 多線程的靈活使用.
- 各類併發事件的處理/以及界面的合理性/流暢度
- 設計模式的靈活使用.
- 高級iOS開發
- 說明:做爲一名高級的iOS開發,你須要具有如下技能(我不是高級開發,因此這裏只能給大家提供建議.)
- 必備技能
- 應用的組件化/架構分層
- 數據結構,操做系統,計算機網絡都有本身的瞭解和認知
- Shell腳本/python/Ruby/JS 至少會一種.
詳細學習路線
- 學習路線
- 簡介
這裏只簡單闡述一些概念性的東西,以及學習路線規劃,真正的知識請從iOS基礎知識點往下開始看.
- Objective-C
- 程序啓動原理
- App組成
- 打開程序
- 執行main函數
- 執行UIApplicationMain函數
- 初始化UIApplication(建立設置代理對象,開啓事件循環)
- 語法.(此處定義可能略失嚴謹,口頭教學爲主)
- 基礎語法
- 對象.
- 屬性
- 數據類型
- 方法
- 繼承
- Frame/CGRect/CGPoint和CGSize
- 內存(針對MRC下狀況進行介紹)
- ARC/MRC
- 弱引用/強引用
- Assign,retain,copy,strong
- import 和@class的區別
- Xcode使用
- 首先是針對Xcode菜單欄,但願本身能夠去翻譯一下每一個菜單裏每項功能的英文都是什麼意思,有助於本身熟悉並加深印象的使用Xcode.
- 熟悉Xcode的各個功能.
- 界面分析(下載App進行學習).
- 在這裏推薦有興趣的開發人員,下載並分析,AppStore中的每項分類的top50的應用,多學習大公司以及流行應用是如何開發應用的,其中流行的,新穎的開發界面的方式能夠總結下來,猜測在大應用中,別的程序員是如何開發的.
- 代碼架構.
- 各類工具、第三方的使用.
- 其實每一個項目的創建都大體分爲:項目框架搭建,原生界面搭建,嵌入第三方庫.有不少功能都會用到第三方庫,大多數第三方庫都是本着快速開發,完整功能實現的目的存在的.須要開發人員可以根據業務邏輯不一樣,選擇最好最優質的第三方庫進行使用.
- 代碼封裝
- 當使用較多第三方庫後,要求開發人員學習其開發特色,以及其封裝手法,運用在本身的項目上,封裝本身的代碼.靈活運用.
iOS基礎知識點
- iOS基礎知識點
- 如何學習iOS
- 剛剛入門(如何學習)
- 打好基礎,學習OC中各類經常使用語法.
- 學習如何上架,上架會由於什麼被拒,瞭解App上架規則.
- 多學習官方說明文檔.
- 剛剛入職1年(如何穩定)
- 多看開源或者註明的第三方庫.
- 收藏並閱讀各類大神的博客或者論壇.
- 開始考慮項目中的細節優化,內存處理和耗電狀況
- 入職3年(如何進階)
- 開始涉獵不止於iOS領域中的知識,會去了解相關職位的基礎知識,例如前端和後臺或者服務器運維,或者項目相關知識,具體往本身的職業規劃靠攏
- 框架的學習
- 第三方框架
- AFNetworking
- SDAutoLayout
- YYKit
- MJRefresh
- MJExtension
- Bugly
- Qiniu
- Masonry
- TZImagePickerController
- Hyphenate_CN
- 基礎UI控件
- UILabel 標題欄
- UIButton 按鈕
- UIImageView 圖片視圖
- UITextField 文本輸入框
- UITextView 文本展現視圖
- UIProgressView 進度條
- UISlider 滑動開關
- UIGesture 手勢
- UIActivityIndicator 菊花控件
- UIAlertView(iOS8廢除) 警告框
- UIActionSheet(iOS8廢除) 操做表單
- UIAlertController(iOS8出現) 警告視圖控制器
- UIScrollView 滾動視圖
- UIPageControl 頁面控制器
- UISearchBar 搜索框
- UITableView 表視圖
- UICollectionView集合視圖
- UIWebView網頁瀏覽器
- UISwitch開關
- UISegmentControl選擇按鈕
- UIPickerView選擇器
- UIDatePicker日期選擇器
- UIToolbar工具欄
- UINavigationBar通知欄
- UINavigationController通知視圖控制器
- UITabbarController選擇視圖控制器
- UIImagePickerController相冊
- UIImage圖片
- Xcode的使用
- 基礎操做 狀態欄
- 偏好設置
- Xcode Source Control 源代碼管理器
- Xcode workSpace工做組
- Xcode Scheme 計劃
- Xcode AutoLayout 約束
- Xcode CoreData數據庫
- LLDB 斷點調試
- 數據存儲
- NSKeyedArchiver
- SQLite
- FMDB
- App生命週期
- 控制器生命週期
- alloc
- init
- 建立View
- ViewDidLoad
- ViewWillAppear
- ViewDidAppear
- ViewWillDisappear
- 視圖將要消失 (作一些視圖將要消失時的UI的處理)
- ViewDidDisappear
- 視圖已經消失 (作一些視圖消失以後數據的處理)
- viewDidDisappear銷燬定時器
- dealloc
- didReceiveMemoryWarning
- 開發者帳號&上架流程
- 經常使用知識
- 通訊
- NS系列
- 宏定義
- 視圖層次
- 切換視圖
- 深淺拷貝
- 對象序列化
- 寫入文件
- 獲取沙盒路徑
- 翻轉視圖
- 延伸視圖
- 九大基本數據類型
- 九宮格
- 座標比較
- UIColor 、CIColor和CGColor 之間的關係
- 畫圖
- 靜態變量
- tag值
- 延時執行方法
- KVC/KVO
- 謂詞NSPredicate
- 幀動畫
- isKindOfClass 與 isMemberOfClass
- Return/Break/Continue
- Core Animation
- CALayer
中級知識點
- UIScrollView/UITableView/UICollectionView 的嵌套
- 動態行高
- 通知/代理/block
- 程序啓動原理
- 觸摸事件/手勢
- Runtime
- NSRunLoop
- GCD
- ReactiveCocoa開發
- 區分模擬器/真機項目
- 經常使用知識
- 單例模式
- 多線程
- 網絡請求
- 定位
- 源代碼管理Git
- Block
- 藍牙/傳感器
- 物理仿真器UIDynamic
- 通信錄獲取
iOS高級知識點
- iOS高級知識點
- Socket
- XMPP
- 加密
- MD5詳解
- Base64加密解密
- RSA非對稱加密
- AES對稱加密
- 音頻
- 基礎
- Core Audio
- Audio Toolbox
- OpenAL
- AVFoundation
- Speex語音聊天
- AudioQueue/AudioSession
- Speex簡介
- 視頻
- 直播
- RTMP協議
- RTMP直播應用與延時分析
- 若是作一款inke版的App
- 推流發佈和播放RTMP
- FFmpeg
- 基於FFmpeg的推流器
- HLS流媒體傳輸協議(HTTP Live Streaming)
- FFmpeg
- ijkPlayer
- 算法
- 簡介
- 冒泡排序
- 快速排序
- 插入排序
- 歸併排序
- 二分查找
- 希爾排序
- 動態規劃
- 堆排序
官方Kit
- ARKit.
- SiriKit
- HealthKit
- HomeKit
- SearchKit
- IOKit
- PDFKit
- CloudKit
- GameplayKit
- SpriteKit
- SceneKit
- MusicKit
- ResearchKit
- MapKit
- StoreKit
- AVKit
本文於去年9月編輯總結,後續片斷爲逆向知識點和原理知識點