聊聊 iOS 开发

原创 2015年04月24日 22:43:07

做开发到一定程度后就会面临“转职”,是转向更深的技术还是工程管理值得考虑啊。。
这里写图片描述


行业现状

虽然近几年有大量的开发者涌入移动端,社会上的各种培训机构也越来越多,但是优秀的 iOS 开发者在行业内仍然很少,这一方面是由于创业者很多,另一方面是因为技术更新换代很快,而且开发也需要长时间的经验积累,以近几年的 WWDC 大会为例,11年发布的 iOS5 与 iOS4 相比简直就是跨越性的更新,虽然用户可能感觉不到,但是从 SDK 的变化来说,开发者的压力是很大的;12年发布的 iOS6 带来了 AutoLayout 、CoreImage这些新的技术以及像 PassKit、CollectionView、State Preservation 这些大量的新的 APIs;iOS7 的变化大家都看在眼里,UI 的调整往往意味着过去经验的结束,你要重新思考对细节的处理;iOS8 也有理由说是变化最大的版本,带来了像 Extensions、Size Classes、Metal、Watch、Swift 等等这些全新的东西。

要学习的东西很多,但是总得来说行业前景还是很好,而且你每年都有机会实现弯道超车。


工作场景

能对产品进行需求分析,设计适合的架构,分解模块等,其次开发,开发中需要有产品观,毕竟要想从几十万的开发者中脱颖而出,除了技术还要有对产品本身的激情,对工作只是当成一个班去上是万万不行的。
能做好技术选型(需要用到的技能在下面的【技能列表】中),保证系统的稳定度。后者会比较麻烦,因为产品不了解代码本身的情况,对一些可能出现的问题并不清楚,而这些只有开发者最清楚,如果开发者不说的话就没人知道了,这也就是项目中的第二种需求,即非功能性需求,处理好这20%的非功能性需求才是真正体现一个开发者能力的地方。
扯了这么多,说说实际的工作内容:
前期:
* 需求分析
* 框架搭建,技术选型,如选择本地化存储方案 ,网络层的架构设计,可以在这个阶段把一些好用的第三方框架引起来,如 FMDB、FLEX、AFNetworking、AsyncSocket 等,这个阶段非常重要,因为维护代码的时间永远比开发功能的时间长,要尽力创建有弹性、易维护的系统
* 与后台对接,磨合期间偶尔会有“前端后端打架”的情况发生
* 可能还会有其他的前期准备,如建立 RSA/AES 的安全方案、国际化的策略等

中期:
* 参与产品设计
* 完成功能性需求
* 重构与优化

后期:
* 修复 Bugs
* GoTo 中期:
* Change 是软件开发中的真理,不会有结束的时候,除非是一个只有10行代码的程序

不要敷衍自己开发的产品,否则就是浪费自己的生命。


合作对象

直接对象:
* 产品
* UI
* UX
* 测试
* 后台
* 其他前端

间接对象:
* 所有和公司有直接关系或间接关系的人。

如果你以为只管“打点好”和产品相关的7、8个人你就错了,讨论小组的背后可能有上百人的暗中参与,有些没有节操的产品会在你面前固执己见、冠名堂皇,在领导面前“通敌卖国”。


技能列表

  • 内存管理,不需要防御式编程,但是大脑一定要清晰的知道自己使用的对象的内存情况。
  • UIKit,熟练掌握,能不看文档就知道常用的控件有哪些方法以及能做什么。
  • Storyboard(xib)
  • Auto Layout 和 Size Classes,前者更重要
  • 各种手势处理
  • KVO\KVC
  • GCD
  • delegate(不要与代理设计模式混淆)
  • Block
  • Notification
  • APNs,远程通知
  • 视图状态保存

其实开发中大多数问题都是“临时”遇到的问题,只有平时积累的够多,才能游刃有余的解决。上面的这些技能只能算是抛砖引玉,更多地学习主要还是在自己遇到问题或者遇到不懂的知识点的时候,每一个困难都是财富,都是一个学习的机会,像 CoreData、设计模式之类的技能你难道不学吗?兴趣和遇到问题的切入点很重要,不要敷衍自己,多看书,书看的越多,越会觉得自己无知。

另外,技能这块也不要把关注点全放在 iOS 的平台技术上,做开发的一定不能偏科,有时候你觉得自己只是某一方面比较薄弱,比如说“我就是记忆力不行”,其实差距是全面的,在下面的【学习资源】里我除了列举 iOS 相关的资源以外,也会列举一些我看过的、觉得对开发提升有帮助的书籍。

怎样成为一个高手?显然高手总是通过自学产生的。

关于Objective-C 和 Swift

对目前的 Swift 来说,我是坚定的反对者,这种立场其实和我最开始时不一样:
这里写图片描述
Swift 目前非常不稳定,连 Xcode 都对它兼容的不好,每次 Swift 有个稍大的更新就像是把项目推倒重来,而且也不可能完全只用 Swift 来开发一个项目,基于 Objective-C 和 C 的框架有很多,iOS 是开发离不开 C 的。
除此之外,我觉得 OC 比 Swift 更加灵活,前者更依赖运行时,后者几乎就是编译时,OC 能做很多 Swift 做不了的事情,如运行时的关联对象等,不过这并不是说 Swift 不重要,只是一定要排一个优先级的话,我觉得短期内 Swift 无法对 Objective-C 造成太大影响,所以先学好 OC 还是更好一些,而且技多不压身嘛

更新:当 Xcode 7.1.1 发布后

Xcode 对 Swift 的支持越来越好了,特别是 7.1.1 这个版本,对基本的类型判定、文档检索,甚至是对枚举类型的支持,比如像这样的语法: .ScaleAspectFill,支持的已经很好了,这在之前是不敢想的。


学习资源

  • 官方资源
  • Ray Wenderlich
  • objc.io
  • Mattt Thompson
  • 《Objective-C基础教程》
  • The Big Nerd Ranch的英文原版教程:《Objective C Programming The Big Nerd Ranch Guide 2nd Edition》《iOS Programming - The Big Nerd Ranch Guide 4ed》,后者有中文版
  • 《Objective-C高级编程:iOS与OS X多线程和内存管理》,对于 OC 的内存管理和 Block 的实现来说,该书是必读之书
  • 《Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法》,涵盖的点很多,但是有些地方该深入的时候没有深入
  • 《Head First 设计模式》,比“四人帮”的《设计模式》门槛低、容易消化,对于想提升模块设计能力来说,该书是必读之书
  • 《代码大全》,这本书很厚,建议选择自己感兴趣的部分跳读,技术性的东西虽然不多,偏理论,但是当你想在团队中推广某些观点的时候,你绝对需要用到里面的理论知识,否则很难推广或者让人信服
  • 《UML和模式应用》,想做架构师吗? 不会 UML 哪行
  • 《深入理解计算机系统》
  • 在社区中交流,如 Stackoverflow、GitHub 或国内的一些论坛,交流总是有用的。
版权声明:如需转载,请注明出处,谢谢!

【转载】 聊聊 iOS 开发

做开发到一定程度后就会面临“转职”,是转向更深的技术还是工程管理值得考虑啊。。  行业现状 虽然近几年有大量的开发者涌入移动端,社会上的各种培训机构也越来越多,但是优秀的 iOS 开发...
  • hafubote
  • hafubote
  • 2015年08月28日 15:00
  • 154

聊聊架构(4)

单元测试 要认识单元测试,首先要明白什么是单元(Unit)。所谓单元指的是代码调用的最小单位,实际上指的是一个功能块(Function)或者方法(Method)。单元测试是一种白盒测试,必须要对单元...
  • sysuzhyupeng
  • sysuzhyupeng
  • 2017年05月10日 22:16
  • 473

聊聊架构

这篇文章是转来的背景什么是架构师?业内一直没有定论,在前两天『聊聊架构』群的讨论中,来自各大互联网公司的架构师都对自己的工作内容做了总结,然我们还是没有抽象出架构师的定义。反而引来了跟多的问题,比如:...
  • duxingzhe0311
  • duxingzhe0311
  • 2016年04月06日 10:10
  • 2808

聊一聊ThreadLocal

对于ThreadLocal感兴趣是从一个问题开始的:ThreadLocal在何种情况下会发生内存泄露?对于这个问题的思考不得不去了解ThreadLocal本身的实现以及一些细节问题等。接下去依次介绍T...
  • u013256816
  • u013256816
  • 2016年06月28日 16:19
  • 4286

《聊聊架构》第一部分读书笔记

1.认识架构1.1生命周期: 万物皆有生命周期 生命周期包含各种活动,活动的推进是生命周期的必要因素(对象的行为) 生命周期里面的活动拆分后,形成若干新的生命周期 拆分后主体不变的是核心生命周期,变化...
  • crowhyc
  • crowhyc
  • 2017年05月25日 15:03
  • 894

简单聊聊HTTPS和SSL/TLS协议

要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识。 1. 大致了解几个基本术语(HTTPS、SSL、TLS)的含义 2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS...
  • xiaokui_wingfly
  • xiaokui_wingfly
  • 2015年05月24日 15:21
  • 600

聊聊架构(3)

什么是软件架构师在现实生活中,具备软件架构师头衔的人,大都是从软件工程师成长出来的,这个出身已经决定了他们的主要关注点是在软件和CS上。而要真正成长为一个架构师,首先需要克服的就是时间困境。为什么软件...
  • sysuzhyupeng
  • sysuzhyupeng
  • 2017年05月07日 14:28
  • 709

像写文章一样使用 Kotlin

infix 是一个非常有用的关键字,让你的代码看起来像一篇文章一样,你不比再为前后括号匹配着慌,每一个单词其实都是方法调用。...
  • Kotlinlang
  • Kotlinlang
  • 2017年02月04日 07:35
  • 159

推荐一下《聊聊JVM》的专栏

按照惯例新开了一个专栏后要单推一下,推荐一下《聊聊JVM的专栏》,网上关于JVM的文章太多,这个专栏希望能在已有的资料的基础上写出点新意,对一些重要的概念归纳总结,说说自己的观点、理解和实际开发中的经...
  • ITer_ZC
  • ITer_ZC
  • 2014年12月15日 10:08
  • 4389

聊聊单元测试(一)——EasyMock

一、单元测试是保证软件质量的重要方法。 单元测试是对系统中某个模块功能的验证,但我们总会遇到这样那样的问题,导致测试代码很难编写。最直接的一个原因便是强耦合关系,被测试者依赖一些不容易构造,...
  • shan9liang
  • shan9liang
  • 2014年07月11日 10:00
  • 4062
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:聊聊 iOS 开发
举报原因:
原因补充:

(最多只允许输入30个字)