前言
这里筑梦师,是一名正在努力学习的iOS开发工程师,目前致力于全栈方向的学习,希望可以和大家一起交流技术,共同进步,用简书记录下自己的学习历程.
本文阅读建议 1.一定要辩证的看待本文. 2.本文主要是本人对iOS开发经验中总结的知识点 3.本文所有观点仅代表本人. 4.本文只阐述学习路线和学习当中的重点问题.需要读者自己使用百度进行拓展学习. 5.本文所表达观点并不是最终观点,还会更新,因为本人还在学习过程中,有什么遗漏或错误还望各位指出. 6.觉得哪里不妥请在评论留下建议~ 7.觉得还行的话就点个小心心鼓励下我吧~
目录 1.对本职业看法 2.学习方法 3.职业规划 4.产品公司&外包公司 5.做一个负责任的开发者 6.iOS开发学习路线 7.iOS基础知识点 8.iOS中级知识点 9.iOS高级知识点 10.官方Kit
对本职业看法
16年我尝试加入各种iOS开发交流群,群里的气氛大致就是:学什么iOS,iOS完了,OC完了.群里大致三种人:谁有企业开发证书,马甲包了解一下,iOS某网课推广.至今,大部分iOS开发群还都是仅供吹水用,偶尔能碰见几个好心人解决一下问题.
个人观点
个人观点: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定位
说明:作为一名高级的iOS开发,你需要具备以下技能(我不是高级开发,所以这里只能给你们提供建议.)
必备技能
应用的组件化/架构分层
数据结构,操作系统,计算机网络都有自己的了解和认知
Shell脚本/python/Ruby/JS 至少会一种.
说明:作为一名中级的iOS开发,你需要具备以下技能
必备技能(全部都会的情况下查看下一项)
应用的内存处理
应用的推送处理
应用的模块化/单元测试
应用的第三方集成/集中化管理/稳定迭代
阅读强大的第三方源码/拥有快速上手新的第三方库的能力.
能够接受各种新功能的开发(这里是指,即使你没有做过,但是你仍然可以凭借着学习,解决任何业务需求:例如:蓝牙.AR.摄像头.硬件交互.等)
清楚明白数据的传递方式,应用与后台如何交换数据,交换数据的过程,结果,格式.
多线程的灵活使用.
各种并发事件的处理/以及界面的合理性/流畅度
设计模式的灵活使用.
如何判断是否可以升阶
结论
说明:作为一名初级的iOS开发,你需要具备以下技能
必备技能(全部都会的情况下查看下一项)
如何判断是否可以升阶
结论
各种网站的使用
AFN
MJRefresh
第三方库的灵活使用
Xcode的使用
是否了解AFNetworking 的实现原理
是否了解SDAutolayout/Masonry 一种布局库的原理
是否能够处理基本的iOS崩溃原因/无法编译原因/无法上架原因?
是否拥有了一定的工作效率,稳定的工作效率.(而不是说,上面派了一个活下来,忙都忙不完,天天加班,还一堆bug)
是否能够处理第三方库引起的崩溃.
是否可以很好的融入工作环境,完成每一阶段的工作指标,而不会让自己疲惫不堪.
iOS中级开发说白了,就是你学会了基本的UI界面搭建,上架,沉淀一段时间,你觉得自己还适合这门行业,还适合,还能接受 这个所谓的iOS开发工程师的行业.你就可以说是一名中级iOS开发.
这个沉淀时间 大约在1年的实际工作中,就可以完成.
如果你觉得这门行业不适合你,请仔细结合自身情况,是否转另一门计算机语言,还是彻底转行.
如何判断自己是否入门
是否了解Objective-C
是否会使用UI控件.
如果上面的都不了解,那说明你还没有入门,请从iOS学习路线开始学习.
是否了解Mac
是否了解Xcode
简介:这里的定位,仅仅代表我个人意见,仅符合本笔记如何学习从哪里开始学习,怎么去学习来说.
尚未入门
初级iOS开发
中级iOS开发
高级iOS开发
详细学习路线
学习路线
个人心得
开发技巧
完整项目.
当使用较多第三方库后,要求开发人员学习其开发特点,以及其封装手法,运用在自己的项目上,封装自己的代码.灵活运用.
其实每个项目的建立都大致分为:项目框架搭建,原生界面搭建,嵌入第三方库.有很多功能都会用到第三方库,大多数第三方库都是本着快速开发,完整功能实现的目的存在的.需要开发人员能够根据业务逻辑不同,选择最好最优质的第三方库进行使用.
在这里推荐有兴趣的开发人员,下载并分析,AppStore中的每项分类的top50的应用,多学习大公司以及流行应用是如何开发应用的,其中流行的,新颖的开发界面的方式可以总结下来,猜想在大应用中,别的程序员是如何开发的.
界面适配
界面分析(下载App进行学习).
代码架构.
各种工具、第三方的使用.
代码封装
UIKit控件.
首先是针对Xcode菜单栏,希望自己可以去翻译一下每个菜单里每项功能的英文都是什么意思,有助于自己熟悉并加深印象的使用Xcode.
熟悉Xcode的各个功能.
基础语法
对象.
属性
数据类型
方法
继承
Frame/CGRect/CGPoint和CGSize
内存(针对MRC下情况进行介绍)
ARC/MRC
弱引用/强引用
Assign,retain,copy,strong
import 和@class的区别
App组成
打开程序
执行main函数
执行UIApplicationMain函数
初始化UIApplication(创建设置代理对象,开启事件循环)
.pch
Info.plist
监听系统事件
结束程序.
介绍
概念
编译原理
简介
这里只简单阐述一些概念性的东西,以及学习路线规划,真正的知识请从iOS基础知识点往下开始看.Objective-C
程序启动原理
语法.(此处定义可能略失严谨,口头教学为主)
Xcode使用
iOS基础知识点
iOS基础知识点
通信
NS系列
宏定义
视图层次
切换视图
深浅拷贝
对象序列化
写入文件
获取沙盒路径
翻转视图
延伸视图
九大基本数据类型
九宫格
坐标比较
UIColor 、CIColor和CGColor 之间的关系
画图
静态变量
tag值
延时执行方法
界面旋转+状态栏隐藏
plist文件
KVC/KVO
谓词NSPredicate
帧动画
AutoLayout
isKindOfClass 与 isMemberOfClass
Return/Break/Continue
Core Animation
CALayer
Quartz2D
真机调试
静态库
内存管理
iPad与iPhone的区别
响应链
异常捕捉
国际化
代码模块化
类别/扩展
文章推荐:
个人
公司
企业
应用生命周期
控制器生命周期
dealloc
didReceiveMemoryWarning
视图已经消失 (做一些视图消失之后数据的处理)
viewDidDisappear销毁定时器
视图将要消失 (做一些视图将要消失时的UI的处理)
ViewWillDisappear
ViewDidDisappear
alloc
init
创建View
ViewDidLoad
ViewWillAppear
ViewDidAppear
plist
NSKeyedArchiver
SQLite
FMDB
CoreData
NSUserDefault
沙盒存储
NSDictionary归档
基础操作 状态栏
偏好设置
Xcode Source Control 源代码管理器
Xcode workSpace工作组
Xcode Scheme 计划
Xcode AutoLayout 约束
Xcode CoreData数据库
LLDB 断点调试
StoryBoard
界面预览
界面适配
内存监测
全局断点
全局搜索替换
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图片
苹果自带框架
第三方框架
MJRefresh
MJExtension
Bugly
Qiniu
Masonry
TZImagePickerController
Hyphenate_CN
SDWebImage
AFNetworking
SDAutoLayout
YYKit
刚刚入门(如何学习)
刚刚入职1年(如何稳定)
入职3年(如何进阶)
打好基础,学习OC中各种常用语法.
学习如何上架,上架会因为什么被拒,了解App上架规则.
多学习官方说明文档.
多看开源或者注明的第三方库.
收藏并阅读各种大神的博客或者论坛.
开始考虑项目中的细节优化,内存处理和耗电情况
开始涉猎不止于iOS领域中的知识,会去了解相关职位的基础知识,例如前端和后台或者服务器运维,或者项目相关知识,具体往自己的职业规划靠拢
如何学习iOS
框架的学习
基础UI控件
Xcode的使用
数据存储
App生命周期
开发者账号&上架流程
常用知识
中级知识点
设计模式
UIScrollView/UITableView/UICollectionView 的嵌套
动态行高
通知/代理/block
程序启动原理
触摸事件/手势
图文混编
Runtime
NSRunLoop
GCD
ReactiveCocoa开发
3DTouch
界面渲染
Charles花瓶抓包
区分模拟器/真机项目
常用知识
Block
蓝牙/传感器
物理仿真器UIDynamic
通讯录获取
音频/视频/二维码
真机调试
苹果内购/广告
推送/远程推送
单例模式
多线程
网络请求
定位
源代码管理Git
iOS高级知识点
iOS高级知识点
简介
冒泡排序
快速排序
插入排序
归并排序
二分查找
希尔排序
动态规划
堆排序
直播的技术分析与实现
RTMP协议
RTMP直播应用与延时分析
如果做一款inke版的App
推流发布和播放RTMP
FFmpeg
基于FFmpeg的推流器
HLS流媒体传输协议(HTTP Live Streaming)
FFmpeg
ijkPlayer
AAC视频.H264推流
P2P传输
基础
Core Audio
Audio Toolbox
OpenAL
AVFoundation
Speex语音聊天
AudioQueue/AudioSession
Speex简介
MD5详解
Base64加密解密
RSA非对称加密
AES对称加密
Socket
XMPP
加密
音频
视频
直播
算法
官方Kit
ARKit.
SiriKit
HealthKit
HomeKit
SearchKit
IOKit
PDFKit
CloudKit
GameplayKit
SpriteKit
SceneKit
MusicKit
ResearchKit
MapKit
StoreKit
AVKit
本文于去年9月编辑总结,后续片段为逆向知识点和原理知识点,因为个人水平原因已进行删减,如有兴趣了解可以看我的这篇文章 浅谈iOS进阶路线.