iOS 杂谈iOS精品文章-面试面试题库

建立iOS学习体系之内功篇(纯干货)

2017-06-28  本文已影响1027人  显生宙

我准备出一系列的学习体系, 从秘籍(入门)->内功(修炼)->心法(融合)->大成(拥有自己的学习方法)
如何建立iOS学习体系之秘籍篇(纯干货)

如果大家需要可以评论或者私信我,我会将我文章中分享的图书 pdf、epub、mobi 版本共享给大家!

做开发就像小说一样需要修炼内在的东西, 它将会让你更加懂得如何走向一个更大的舞台, 这篇 内功篇 主要将以下几个内容 :

  1. 当你已经入门iOS后, 应该通过几种形式来提高自己的基础能力
  2. 学会使用他人的框架, 并且从中吸取你需要的知识
  3. 融会贯通, 在自己编码时适当的使用一些设计模式
  4. 多练、多学、多分享

下面我将这几个大点逐一拆分进行细致的讲解 ... ...

1. 当你已经入门iOS后, 应该通过几种形式来提高自己的基础能力

当看到这里的时候, 相信你已经拥有了编写基础部分的能力, 那么基础部分指的是什么呢?

  1. @property 是什么?它会自动生成什么?不同的参数/属性 代表着什么意思?使用场景是什么?
  1. UITableView , UICollectionView 在使用的时候, 不同的自定义cell、item是否应用熟练,?
  1. Autolayout是否熟练?
  1. MVC是否理解?其他的理解吗?例如: MVVM , MVP
  1. 网络层有了解吗? NSURLSession有什么优点吗?为什么使用HTTPS?
  1. AFN, SDWebImage 这两个刚刚接触的框架, 他们的基本运行原理你了解吗?
  1. CGContextRef 了解吗?
  1. CABasicAnimation 了解吗?
  1. 列表控件多时为什么会卡?能优化吗?怎么优化?
  1. 为什么弃用UIWebView?它有什么问题?用什么替代?
  1. pthread、NSLock 用过吗?使用有什么注意的地方吗?
  1. copy, mutableCopy 有什么区别吗?
  1. CGD, NSThread 用过吗?有什么区别吗?NSRunLoop知道吗? 它与线程的关系知道吗?
  1. 内存管理知道吗?ARC是如何进行内存布局的?怎么做到的自动释放?@autoreleasepool 用过吗?它是做什么的?
  1. Delegate、NSNotification、KVO、KVC、Block都知道吗?它们是做什么的?什么场景使用?
  1. 一切皆对象你同意吗?
  1. Runtime 你用过吗? (基本的使用也可以) OC是动态语言你同意吗?
  1. OC 有多继承吗?Category?
  1. 沙盒知道吗?用来干什么的?有几个文件?分别什么作用?
  1. 了解过最新的流行框架吗?WWDC?
  1. 怎么看源码知道吗?苹果开发了一些源码?
  1. Block为什么会循环引用? __block 修饰后为什么可以在block中使用?block 为什么要用copy修饰?

... ...

相信你看到这里基本已经对现有的市场以及作者有所质疑。 老子刚学iOS,你就要求会这会那的!

其实不然, 正因为我是填过坑, 所以才不想让你们的学习之路漫漫, 这些都是一些基本的问题, 说出来说明你关注的问题比较深入, 说不出来也没关系, 你知道了自己当前的问题, 以及努力的方向, 相信总有一天, 回过头来看这些问题, 对你来说, 不值一提. 瞬间秒杀

相信大部分问题的答案你都可以baidu, google出来.如果有需求,我可以自问自答,再整理一篇答案.

2.学会使用他人的框架, 并且从中吸取你需要的知识

就以上面我们说过的AFNetworking举例说明(也可以说是Alamofire):

AFN 基本结构:

AFNetWorking , 头文件, 引入所有需要的类. 通过引入它, 你可以获取AFN的所有功能.

AFURLSessionManager 核心类, 通过它来实现大部分网络相关功能

AFHTTPSessionManager 作为AFURLSessionManager的子类, 实现请求优化处理.

AFURLRequestSerialization 请求处理, 编解码、优化、拼接请求等.

AFURLResponseSerialization 响应处理,序列化、回调分发、数据处理等.

AFSecurityPolicy 请求认证

AFNetworkReachabilityManager 监听网络请求状态变化

值得借鉴的地方:

  1. 使用NSRunloop 默认在后台保持一条线程,监听用户状态变化,不需要时休眠,需要时唤醒。不需要每次都创建新线程来浪费手机空间
  1. dispatch_semaphore_t 控制对异步处理返回结果的控制,避免线程之间出现资源竞争问题
  1. 代码思路清晰,结构明确
  1. 支持多种格式的解析, 流行的多为json和xml
  1. 安全方面也给出了很多的对应接口, 而且调用方便明了

... ...

再举个栗子

ReactiveCocoa 函数响应式编程

那么什么是函数响应式编程?

我的理解是:当一个事件发生时,你需要对其进行监听并作出相应的处理,这里 传输这个事件的桥梁就称为 函数响应式编程

具体的例子:比如你要监听ScrollView的滚动,或者按钮点击的action,或者View根据Model的变化动态 。 这一系列的东西都可以使用RAC作为实现,它提出了一个不一样的编程角度!

MVVM框架的交互就可以使用RAC来搭建桥梁。

这里只是进行一个简单的介绍,RAC方面的话还需要下功夫去学习一下,有兴趣的同学可以follow我,我以后会出相关使用的教程等。

3.融会贯通, 在自己编码时适当的使用一些设计模式

其实关于设计模式部分还是有很多需要聊得,这里简单对其进行一个介绍

什么是设计模式?

我的理解来看,它是为了各个场景而生,在各种不同情况下,要怎么解决问题的一种方案!如我们老生常谈的面向对象就是设计模式的一种,常类别或者对象来描述

那么这里我推荐给大家一本入门的书,大话设计模式,很适合新手看,中级也可以查漏补缺,就是这本
我有它的pdf版本,会在网盘中共享出来。

这里还有几本设计模式、技能扩展相关的文章以及图书,大家可以借鉴一下

  1. design_patterns
  1. Head First
  1. 设计模式之禅(第2版)
  1. Objective-C编程之道
  1. 程序员的自我修养
  1. 网络是怎样连接的
  1. 程序是怎样跑起来的
  1. 计算机是怎样跑起来的
  1. TCP/IP详解卷1:协议
  1. 现代操作系统(原书第3版)
  1. 深入理解计算机系统(原书第3版)
  1. Python编程快速上手:让繁琐工作自动化
  1. 机器学习

4. 多练、多学、多分享

当你看过一些优秀的框架之后,一定要试着融汇到自己的项目中去使用,这样做才能加深记忆,还可以更好的去理解其原理及为什么这么做

无论在工作还是平时,一定要多于他人沟通自己的想法,分享自己的心得,总结自己技巧、想法。

我在这里强烈推荐大家开始写博客,当做笔记也好,写着玩当日记也罢,写什么都可以,最主要的是迈开第一步,相信以后的路会有很多条供你选择。

一定要经常进行总结,将平时的Bug、Category、Views、Animations 等 统统总结起来,可以揉到一起、也可以放到github上与大家分享自己的小Demo。

也可以搭建自己的博客,不需要购买域名,通过 github + hexo 就可以轻松的拥有自己的网页,你可以在上面随心所欲。

这是我总结经验的第二篇文章,总共四篇,希望可以帮助到你!

上一篇下一篇

猜你喜欢

热点阅读