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