手记

iOS开发学习路线

前言

这里筑梦师,是一名正在努力学习的iOS开发工程师,目前致力于全栈方向的学习,希望可以和大家一起交流技术,共同进步,用简书记录下自己的学习历程.

个人学习方法分享
浅谈iOS进阶路线
[如何优雅的使用Mac进行开发]稍后更新

本文阅读建议
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进阶路线.


0人推荐
随时随地看视频
慕课网APP