我准备出一系列的学习体系, 从秘籍(入门)->内功(修炼)->心法(融合)->大成(拥有自己的学习方法)
如何建立iOS学习体系之秘籍篇(纯干货)
如果大家需要可以评论或者私信我,我会将我文章中分享的图书 pdf、epub、mobi 版本共享给大家!
做开发就像小说一样需要修炼内在的东西, 它将会让你更加懂得如何走向一个更大的舞台, 这篇 内功篇 主要将以下几个内容 :
- 当你已经入门iOS后, 应该通过几种形式来提高自己的基础能力
- 学会使用他人的框架, 并且从中吸取你需要的知识
- 融会贯通, 在自己编码时适当的使用一些设计模式
- 多练、多学、多分享
下面我将这几个大点逐一拆分进行细致的讲解 ... ...
1. 当你已经入门iOS后, 应该通过几种形式来提高自己的基础能力
当看到这里的时候, 相信你已经拥有了编写基础部分的能力, 那么基础部分指的是什么呢?
- @property 是什么?它会自动生成什么?不同的参数/属性 代表着什么意思?使用场景是什么?
- UITableView , UICollectionView 在使用的时候, 不同的自定义cell、item是否应用熟练,?
- Autolayout是否熟练?
- MVC是否理解?其他的理解吗?例如: MVVM , MVP
- 网络层有了解吗? NSURLSession有什么优点吗?为什么使用HTTPS?
- AFN, SDWebImage 这两个刚刚接触的框架, 他们的基本运行原理你了解吗?
- CGContextRef 了解吗?
- CABasicAnimation 了解吗?
- 列表控件多时为什么会卡?能优化吗?怎么优化?
- 为什么弃用UIWebView?它有什么问题?用什么替代?
- pthread、NSLock 用过吗?使用有什么注意的地方吗?
- copy, mutableCopy 有什么区别吗?
- CGD, NSThread 用过吗?有什么区别吗?NSRunLoop知道吗? 它与线程的关系知道吗?
- 内存管理知道吗?ARC是如何进行内存布局的?怎么做到的自动释放?@autoreleasepool 用过吗?它是做什么的?
- Delegate、NSNotification、KVO、KVC、Block都知道吗?它们是做什么的?什么场景使用?
- 一切皆对象你同意吗?
- Runtime 你用过吗? (基本的使用也可以) OC是动态语言你同意吗?
- OC 有多继承吗?Category?
- 沙盒知道吗?用来干什么的?有几个文件?分别什么作用?
- 了解过最新的流行框架吗?WWDC?
- 怎么看源码知道吗?苹果开发了一些源码?
- Block为什么会循环引用? __block 修饰后为什么可以在block中使用?block 为什么要用copy修饰?
... ...
相信你看到这里基本已经对现有的市场以及作者有所质疑。 老子刚学iOS,你就要求会这会那的!
其实不然, 正因为我是填过坑, 所以才不想让你们的学习之路漫漫, 这些都是一些基本的问题, 说出来说明你关注的问题比较深入, 说不出来也没关系, 你知道了自己当前的问题, 以及努力的方向, 相信总有一天, 回过头来看这些问题, 对你来说, 不值一提. 瞬间秒杀
相信大部分问题的答案你都可以baidu, google出来.如果有需求,我可以自问自答,再整理一篇答案.
2.学会使用他人的框架, 并且从中吸取你需要的知识
就以上面我们说过的AFNetworking举例说明(也可以说是Alamofire):
AFN 基本结构:
AFNetWorking , 头文件, 引入所有需要的类. 通过引入它, 你可以获取AFN的所有功能.
AFURLSessionManager 核心类, 通过它来实现大部分网络相关功能
AFHTTPSessionManager 作为AFURLSessionManager的子类, 实现请求优化处理.
AFURLRequestSerialization 请求处理, 编解码、优化、拼接请求等.
AFURLResponseSerialization 响应处理,序列化、回调分发、数据处理等.
AFSecurityPolicy 请求认证
AFNetworkReachabilityManager 监听网络请求状态变化
值得借鉴的地方:
- 使用NSRunloop 默认在后台保持一条线程,监听用户状态变化,不需要时休眠,需要时唤醒。不需要每次都创建新线程来浪费手机空间
- dispatch_semaphore_t 控制对异步处理返回结果的控制,避免线程之间出现资源竞争问题
- 代码思路清晰,结构明确
- 支持多种格式的解析, 流行的多为json和xml
- 安全方面也给出了很多的对应接口, 而且调用方便明了
... ...
再举个栗子
ReactiveCocoa 函数响应式编程
那么什么是函数响应式编程?
我的理解是:当一个事件发生时,你需要对其进行监听并作出相应的处理,这里 传输这个事件的桥梁就称为 函数响应式编程
具体的例子:比如你要监听ScrollView的滚动,或者按钮点击的action,或者View根据Model的变化动态 。 这一系列的东西都可以使用RAC作为实现,它提出了一个不一样的编程角度!
MVVM框架的交互就可以使用RAC来搭建桥梁。
这里只是进行一个简单的介绍,RAC方面的话还需要下功夫去学习一下,有兴趣的同学可以follow我,我以后会出相关使用的教程等。
3.融会贯通, 在自己编码时适当的使用一些设计模式
其实关于设计模式部分还是有很多需要聊得,这里简单对其进行一个介绍
什么是设计模式?
我的理解来看,它是为了各个场景而生,在各种不同情况下,要怎么解决问题的一种方案!如我们老生常谈的面向对象就是设计模式的一种,常类别或者对象来描述
那么这里我推荐给大家一本入门的书,大话设计模式,很适合新手看,中级也可以查漏补缺,就是这本。
我有它的pdf版本,会在网盘中共享出来。
这里还有几本设计模式、技能扩展相关的文章以及图书,大家可以借鉴一下
- design_patterns
- Head First
- 设计模式之禅(第2版)
- Objective-C编程之道
- 程序员的自我修养
- 网络是怎样连接的
- 程序是怎样跑起来的
- 计算机是怎样跑起来的
- TCP/IP详解卷1:协议
- 现代操作系统(原书第3版)
- 深入理解计算机系统(原书第3版)
- Python编程快速上手:让繁琐工作自动化
- 机器学习
4. 多练、多学、多分享
当你看过一些优秀的框架之后,一定要试着融汇到自己的项目中去使用,这样做才能加深记忆,还可以更好的去理解其原理及为什么这么做
无论在工作还是平时,一定要多于他人沟通自己的想法,分享自己的心得,总结自己技巧、想法。
我在这里强烈推荐大家开始写博客,当做笔记也好,写着玩当日记也罢,写什么都可以,最主要的是迈开第一步,相信以后的路会有很多条供你选择。
一定要经常进行总结,将平时的Bug、Category、Views、Animations 等 统统总结起来,可以揉到一起、也可以放到github上与大家分享自己的小Demo。
也可以搭建自己的博客,不需要购买域名,通过 github + hexo 就可以轻松的拥有自己的网页,你可以在上面随心所欲。
这是我总结经验的第二篇文章,总共四篇,希望可以帮助到你!