iOS开发学习路线

对本职业见解

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定位

    • 简介:这里的定位,仅仅表明我我的意见,仅符合本笔记如何学习从哪里开始学习,怎么去学习来讲.
    • 还没有入门
      • 如何判断本身是否入门
        • 是否了解Mac
        • 是否了解Xcode
        • 是否了解Objective-C
        • 是否会使用UI控件.
        • 若是上面的都不了解,那说明你尚未入门,请从iOS学习路线开始学习.
    • 初级iOS开发
      • 说明:做为一名初级的iOS开发,你须要具有如下技能
      • 必备技能(所有都会的状况下查看下一项)
        • Xcode的使用
        • 第三方库的灵活使用
          • AFN
          • MJRefresh
        • 各类网站的使用
      • 如何判断是否能够升阶
        • 是否了解AFNetworking 的实现原理
        • 是否了解SDAutolayout/Masonry 一种布局库的原理
        • 是否可以处理基本的iOS崩溃缘由/没法编译缘由/没法上架缘由?
        • 是否拥有了必定的工做效率,稳定的工做效率.(而不是说,上面派了一个活下来,忙都忙不完,每天加班,还一堆bug)
        • 是否可以处理第三方库引发的崩溃.
        • 是否能够很好的融入工做环境,完成每一阶段的工做指标,而不会让本身疲惫不堪.
      • 结论
        • iOS中级开发说白了,就是你学会了基本的UI界面搭建,上架,沉淀一段时间,你以为本身还适合这门行业,还适合,还能接受 这个所谓的iOS开发工程师的行业.你就能够说是一名中级iOS开发.
        • 这个沉淀时间 大约在1年的实际工做中,就能够完成.
        • 若是你以为这门行业不适合你,请仔细结合自身状况,是否转另外一门计算机语言,仍是完全转行.
    • 中级iOS开发
      • 说明:做为一名中级的iOS开发,你须要具有如下技能
      • 必备技能(所有都会的状况下查看下一项)
        • 应用的内存处理
        • 应用的推送处理
        • 应用的模块化/单元测试
        • 应用的第三方集成/集中化管理/稳定迭代
        • 阅读强大的第三方源码/拥有快速上手新的第三方库的能力.
        • 可以接受各类新功能的开发(这里是指,即便你没有作过,可是你仍然能够凭借着学习,解决任何业务需求:例如:蓝牙.AR.摄像头.硬件交互.等)
        • 清楚明白数据的传递方式,应用与后台如何交换数据,交换数据的过程,结果,格式.
        • 多线程的灵活使用.
        • 各类并发事件的处理/以及界面的合理性/流畅度
        • 设计模式的灵活使用.
      • 如何判断是否能够升阶
      • 结论
    • 高级iOS开发
      • 说明:做为一名高级的iOS开发,你须要具有如下技能(我不是高级开发,因此这里只能给大家提供建议.)
      • 必备技能
        • 应用的组件化/架构分层
        • 数据结构,操做系统,计算机网络都有本身的了解和认知
        • Shell脚本/python/Ruby/JS 至少会一种.

详细学习路线

  • 学习路线
    • 简介
      这里只简单阐述一些概念性的东西,以及学习路线规划,真正的知识请从iOS基础知识点往下开始看.
    • Objective-C
      • 介绍
      • 概念
      • 编译原理
    • 程序启动原理
      • App组成
        • Info.plist
        • .pch
      • 打开程序
      • 执行main函数
      • 执行UIApplicationMain函数
      • 初始化UIApplication(建立设置代理对象,开启事件循环)
      • 监听系统事件
      • 结束程序.
    • 语法.(此处定义可能略失严谨,口头教学为主)
      • 基础语法
      • 对象.
      • 属性
      • 数据类型
      • 方法
      • 继承
      • Frame/CGRect/CGPoint和CGSize
      • 内存(针对MRC下状况进行介绍)
      • ARC/MRC
      • 弱引用/强引用
      • Assign,retain,copy,strong
      • import 和@class的区别
    • Xcode使用
      • 首先是针对Xcode菜单栏,但愿本身能够去翻译一下每一个菜单里每项功能的英文都是什么意思,有助于本身熟悉并加深印象的使用Xcode.
      • 熟悉Xcode的各个功能.
    • UIKit控件.
    • 界面分析(下载App进行学习).
      • 在这里推荐有兴趣的开发人员,下载并分析,AppStore中的每项分类的top50的应用,多学习大公司以及流行应用是如何开发应用的,其中流行的,新颖的开发界面的方式能够总结下来,猜测在大应用中,别的程序员是如何开发的.
      • 界面适配
    • 代码架构.
    • 各类工具、第三方的使用.
      • 其实每一个项目的创建都大体分为:项目框架搭建,原生界面搭建,嵌入第三方库.有不少功能都会用到第三方库,大多数第三方库都是本着快速开发,完整功能实现的目的存在的.须要开发人员可以根据业务逻辑不一样,选择最好最优质的第三方库进行使用.
    • 代码封装
      • 当使用较多第三方库后,要求开发人员学习其开发特色,以及其封装手法,运用在本身的项目上,封装本身的代码.灵活运用.
    • 完整项目.
    • 开发技巧
    • 我的心得

iOS基础知识点

  • iOS基础知识点
    • 如何学习iOS
      • 刚刚入门(如何学习)
        • 打好基础,学习OC中各类经常使用语法.
        • 学习如何上架,上架会由于什么被拒,了解App上架规则.
        • 多学习官方说明文档.
      • 刚刚入职1年(如何稳定)
        • 多看开源或者注明的第三方库.
        • 收藏并阅读各类大神的博客或者论坛.
        • 开始考虑项目中的细节优化,内存处理和耗电状况
      • 入职3年(如何进阶)
        • 开始涉猎不止于iOS领域中的知识,会去了解相关职位的基础知识,例如前端和后台或者服务器运维,或者项目相关知识,具体往本身的职业规划靠拢
    • 框架的学习
      • 苹果自带框架
      • 第三方框架
        • 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出现) 警告视图控制器
      • 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 断点调试
      • StoryBoard
      • 界面预览
      • 界面适配
      • 内存监测
      • 全局断点
      • 全局搜索替换
    • 数据存储
      • plist
      • NSKeyedArchiver
      • SQLite
      • FMDB
      • CoreData
      • NSUserDefault
      • 沙盒存储
      • NSDictionary归档
    • App生命周期
      • 应用生命周期
      • 控制器生命周期
        • alloc
        • init
        • 建立View
        • ViewDidLoad
        • ViewWillAppear
        • ViewDidAppear
        • ViewWillDisappear
          • 视图将要消失 (作一些视图将要消失时的UI的处理)
        • ViewDidDisappear
          • 视图已经消失 (作一些视图消失以后数据的处理)
          • viewDidDisappear销毁定时器
        • dealloc
        • didReceiveMemoryWarning
    • 开发者帐号&上架流程
      • 我的
      • 公司
      • 企业
    • 经常使用知识
      • 通讯
      • NS系列
      • 宏定义
      • 视图层次
      • 切换视图
      • 深浅拷贝
      • 对象序列化
      • 写入文件
      • 获取沙盒路径
      • 翻转视图
      • 延伸视图
      • 九大基本数据类型
      • 九宫格
      • 坐标比较
      • UIColor 、CIColor和CGColor 之间的关系
      • 画图
      • 静态变量
      • tag值
      • 延时执行方法
      • 界面旋转+状态栏隐藏
      • plist文件
      • KVC/KVO
      • 谓词NSPredicate
      • 帧动画
      • AutoLayout
      • isKindOfClass 与 isMemberOfClass
      • Return/Break/Continue
      • Core Animation
      • CALayer
      • Quartz2D
      • 真机调试
      • 静态库
      • 内存管理
      • iPad与iPhone的区别
      • 响应链
      • 异常捕捉
      • 国际化
      • 代码模块化
      • 类别/扩展

中级知识点

  • 设计模式
  • UIScrollView/UITableView/UICollectionView 的嵌套
  • 动态行高
  • 通知/代理/block
  • 程序启动原理
  • 触摸事件/手势
  • 图文混编
  • Runtime
  • NSRunLoop
  • GCD
  • ReactiveCocoa开发
  • 3DTouch
  • 界面渲染
  • Charles花瓶抓包
  • 区分模拟器/真机项目
  • 经常使用知识
    • 单例模式
    • 多线程
    • 网络请求
    • 定位
    • 源代码管理Git
    • 真机调试
    • 苹果内购/广告
    • 推送/远程推送
    • 音频/视频/二维码
    • Block
    • 蓝牙/传感器
    • 物理仿真器UIDynamic
    • 通信录获取

iOS高级知识点

  • iOS高级知识点
    • Socket
    • XMPP
    • 加密
      • MD5详解
      • Base64加密解密
      • RSA非对称加密
      • AES对称加密
    • 音频
      • 基础
      • Core Audio
      • Audio Toolbox
      • OpenAL
      • AVFoundation
      • Speex语音聊天
      • AudioQueue/AudioSession
      • Speex简介
    • 视频
      • AAC视频.H264推流
      • P2P传输
    • 直播
      • 直播的技术分析与实现
      • 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月编辑总结,后续片断为逆向知识点和原理知识点

相关文章
相关标签/搜索