我的iOS开发之路《上》

这篇博客不谈具体的技术,谈谈学习iOS开发以来的心得和所得所获,大致的过程分为

  1. 学习之前有哪些基础
  2. 如何入门
  3. 持续学习
  4. 进阶的辛酸
  5. 未来的计划

基础篇

在2014年7月份,我的第一份工作,还是一个实习生的时候,突然接到通知要做iOS开发,在这之前的实习期间主要做Web和DB,在校期间学了点OS,算法,数据结构,网络的基础,英语阅读能力也还行。在刚开始做iOS的时候其实我是拒绝的,觉得自己之前学的都白学了,而且都毕业了,再转会不会晚了等等疑问不断地响起。

然而事实证明,做一件事永远都不嫌晚,重要的是是否坚持去做了。还有一些看似和iOS无关的知识其实还是很重要的,在理解iOS底层方面打下了基础。

回过头想想,在大学期间,有些课真的应该认真学习,尤其是那些公共基础类的课:操作系统,数据结构与算法,计算机网络,计算机组成原理,还推荐一门编程语言,也是我认为在大学期间应该学好的唯一一门编程语言:C语言。有了这些基础后,想要学习具体的一个平台上的开发,真的会变得很容易。不管是iOS平台,还是安卓,或者是windows,linux平台。

iOS入门

我的入门经验就是边学边做,那时候刚转的时候,就给了我两天时间看一本书《iOS编程》。当时我的做法是先去查询了iOS开发有哪些内容,总结过后发现入门其实只需要懂Objc这门语言基本语法和UIKit,Foundation这两个库。

然后当时花了一天时间学习了Objc的基本语法(类,对象,接口,协议,分类,扩展,属性),还有一天时间熟悉了Foundation(NSObject,NSString,NSArray,NSDictionary,NSValue,NSSet,NSData)和UIKit(UIColor,UIFont,UIImage,UIImageView,UILabel,UIButton,UIScrollView,UITableView,UIView,UIViewController,UIWebView)。

期间还看了这篇官方入门文章,跟着教程做了一遍,熟悉了下Xcode,结合书上说得实践一下,加深下理解。

然后就开始写页面之旅,基本就是一个页面一个tableview,然后加上label和button就能解决了,这期间开始补充了(delegate,MVC,Notification,KVC&KVO,Block,ARC,Autolayout,异常,多线程)这方面的基础知识。

这里还是要重点说一下的,我当时的选择还是偏向于学习Objc这门语言的一些特性,而不是去学习其他的framework,事实证明,当初的选择还是很正确的,当基础扎实后,再去学其他框架都很轻松,基本看一遍文档就行了。在这个期间看了这两本书《Objective-C编程全解》和《iOS6编程实战》,一本是主要讲解Objc这门语言有哪些特性,还有一本则是讲解了cocoa touch中的一些特性。

这时候碰到了一个问题,当时我实习的公司不怎么重视移动端,总共就3个人做客户端,碰到很多问题可能需要花很长时间排查,学习的效率开始降低。然后就萌生了跳槽的想法,省去中间曲折的求职经历,最后去了一家发展比较迅速的互联网公司,开始了我的进阶之旅。

持续学习

这个时候其实还是比较舒适的,团队人很多,但app又是偏向业务的,所以大部分内容都是if-else和tableview,用之前学的知识完全够用了。直到碰到了一个带我真正入门iOS开发的人,我开始意识到iOS不是这么简单,如果不想以后失去竞争力,需要了解的东西还有太多,太多,然后看了Apple的两篇全面介绍iOS开发的文章。

这两篇文章让我全面的理解了iOS开发包含了那些内容,可以往哪些方向发展。

Cocoa Touch Layer

在这一层主要学习了这些内容:

  1. App Extensions(App Extension Programming Guide
  2. Handoff(Handoff Programming Guide
  3. Document Picker(Document Picker Programming Guide
  4. AirDrop(UIActivityViewController Class Reference
  5. TextKit(Text Programming Guide for iOS
  6. UIKit Dynamics(UIKit Framework Reference
  7. Multitasking(App Programming Guide for iOS
  8. Auto Layout(Auto Layout Guide
  9. Storyboards(UIStoryboard Class Reference
  10. UI State Preservation(App Programming Guide for iOS
  11. Apple Push Notification Service(Local and Remote Notification Programming Guide
  12. Local Notifications(Local and Remote Notification Programming Guide
  13. Gesture Recognizers(Event Handling Guide for iOS
  14. Standard System View Controllers(View Controller Programming Guide for iOSView Controller Catalog for iOS

主要包括了10个Framework(Address Book UI Framework,EventKit UI Framework,GameKit Framework,iAd Framework,MapKit Framework,Message UI Framework,Notification Center Framework,PushKit Framework,Twitter Framework以及最重要的UIKit Framework)。

这些内容大概花了3个月的时间全部实践了一遍,可惜当时还没有写博客的习惯,很多都没有记录下来。

Media Layer

这一层的内容与一些其他专业知识相关,理解的时候需要更多的专业领域的知识,我也没有全部都学完,主要学了平时经常用到的绘图和动画,这一层主要包括这些内容:

Graphics Technologies

  1. UIKit graphics(UIKit Framework Reference
  2. Core Graphics(Quartz 2D Programming Guide
  3. Core Animation(Core Animation Programming Guide
  4. Core Image(Core Image Reference Collection
  5. OpenGL ES and GLKit(OpenGL ES Programming Guide for iOS
  6. Metal(Metal Programming Guide
  7. TextKit and Core Text(Text Programming Guide for iOS Core Text Programming Guide
  8. Image I/O(Image I/O Reference Collection
  9. Photos Library(Photos Framework Reference

这一块内容1,2,3,7,9已经实践过,其余的还没有涉猎,计划在需要的时候再补充。

Audio&Video Technologies

  1. Media Player framework(Media Player Framework Reference.
  2. AV Foundation & AVKit(AVFoundation Programming Guide
  3. OpenAL(http://www.openal.org
  4. Core Audio & Core Media(Core Media Framework Reference
  5. UIImagePickerController(Camera Programming Topics for iOS

这一块基本没有涉猎,主要是没有使用的场景,基础的用法看着API会用,一些比较深的内容还需要大量资料和实践。每个领域都够研究好几年了,只能以后如果开始做这个方面的工作再去挖掘。

主要覆盖了22个Framework(Assets Library Framework,AV Foundation Framework,AVKit Framework,Core Audio,CoreAudioKit Framework,Core Graphics Framework,Core Image Framework,Core Text Framework,Core Video Framework,Game Controller Framework,GLKit Framework,Image I/O Framework,Media Accessibility Framework,Media Player Framework,Metal Framework,OpenAL Framework,OpenGL ES Framework,Photos Framework,Photos UI Framework,Quartz Core Framework,SceneKit Framework,SpriteKit Framework)

基本上这两层了解后,页面级的操作没啥大问题,而且写的多了以后,也会慢慢的产生模块化,可扩展的思路,为接下来的进阶打好基础。

下一篇主要讲剩余的两层学习和衍生出去的相关进阶所需的内容。