著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:Wang Hailong
链接:https://www.zhihu.com/question/20016551/answer/13680483
来源:知乎

关于iOS开发的学习 打个比方就像把汽车分解

  • 最底层的原料有塑料 钢铁
  • 再用这些底层的东西造出来发动机 座椅
  • 最后再加上写螺丝 胶水等 把汽车就拼起来了

iOS基本都是英文的资料 也由于封闭 文档写的相当好
在遇到新框架的时候

  • 弄明白框架的功能
  • 去文档里搜搜 框架的 Programming Guide 很有用
  • 要弄明白框架类的继承结构

写iOS的程序不一定都是用OBJC 很多框架是用C写的
学习iOS开发基础可以按照下面两个方面学

  1. 基础 (原料 钢铁 塑料)
  • OBJ-C --- 语法弄明白 @interface @property 这些东西总要知道是干嘛的 怎么用
  • 基础库 --- NSString NSArray NSDictionary等 这些东西在所有的框架里都会出现
    • iOS大部分类都是继承自NSObject (我还没见过不是继承自NSObject的..)
    • 还有一些 像NSCopying的接口(经@李禹龙提醒 应该叫协议) 不是特别用到开始不用了解
    • NSObject 创建对象的时候用 + (id)alloc 方法 创建后需要init方法初始化 这个init指的是所有前面是init的方法比如UIView的初始化方法是 - (id)initWithFrame:(CGRect)aRect 在Objc里有很多这样关于函数命名的约定 类似于在python中的函数__xxx
    • NSString 字符串 NSArray 数组 NSDictionary 字典 这些都需要弄很清楚 其他的类都是一个套路
    • NSMutableArray 这样带Mutable的类代表可变的 继承自相应的不可变类 比如NSMutableArray继承自NSArray 他们都添加了可以改变对象内容的方法比如
      • - (void)addObject:(id)anObject 添加对象
      • - (void)removeObject:(id)anObject 删除对象
    • 上面只是一个大概的总结 还有很多东西需要学 iOS5的SDK已经支持ARC 可以自动进行release 但是对iOS4的支持还有一个小问题 现在要开发应用 可能还需要按照之前的MRC的方式alloc release retain autorelease 之类的内存管理方法 不过如果你现在开始学 到编出像样的APP iOS5可能已经普及了 可以直接用ARC (另 之前对ARC的了解很粗浅 现在开发程序完全可以直接ARC iOS4不支持的weak是有办法替代的 用unsafe_unretained 如果同时支持iOS5和iOS4 用宏判断下就可以 当然也可以直接用assign)
    • 还有一点开始学习的时候肯定很疑惑 内存管理是基于函数名称的 比如带alloc copy的函数 用了之后返回的对象一定要release 这个不用疑惑 照做就行了
  • 文档: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/Introduction/Introduction.html
  1. 高级库(发动机)
  • UIKit --- UI库 OBJC
    • UIResponder 父类是NSObject UIKit里最底层的库 可以响应一些触摸事件 设置焦点等功能
    • UIView 父类是UIResponder 所有View的父类 方法太多了 大部分很有用 这个不赘述了 中文的资料也很多了
    • 关于UIView的子类 有很多 UIButton UITableView 这个都需要各个击破 看看文档从名字上就很容易理解是做什么的
    • UIViewController 是管理View 和 Model的类 (@张开 说UIViewController是用来管理view的,管理model 的类自己写,当然,model也可以用UIViewController来管理,不过恐怕成为不好的代码。 的确是这样的 Model的改变最好通过Notification来传播 之前吃过这样的亏 最好不要用delegate模式)
      • UIViewController 管理所有设备发生的事件 比如屏幕旋转 屏幕关闭 或者一些其他的 程序的控制逻辑也应该写在这里
      • 他的初始化函数是- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle 后面那个NibName 是Interface Builder 里设计的界面
        • 现在IB已经集成到XCode里了 打开.xib的文件打开的就是IB
        • IB和代码交互用的是IBAction IBOutlet 这些标记 这些标记追踪到他们的定义其实对编译器来说什么都不表示 只能IB识别
        • IB也没那么高深 XIB文件解开之后就是一堆代码
        • 之前面过一家小公司 看我当时写的程序里面用到了IB 一脸不屑 说他们都是用代码控制view 意思他们玩的都是高科技 IB都是垃圾 很多人也纠结到底用不用IB 的确 很多时候IB灵活度不行 但是不需要灵活度的时候还不用IB 那不是装X吗 要是没人用苹果还开发IB干嘛 早去掉了 IB在很多时候节省很多工作量
    • UINavigationController 再说说NavigationController
      • 刚接触开发的时候 不明白 View和View之间怎么切换的 最重要的就是UINavigationController 他是一层一层推进view的 打开iPhone里的联系人 每点一个联系人屏幕就会像右推到下一个界面 这就是UINavigationController在做的事
      • UINavigationController 维护一个堆栈
      • - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated 是像堆栈里压一个UIViewController
      • - (UIViewController *)popViewControllerAnimated:(BOOL)animated 是从堆栈里弹出来一个UIViewController
      • 就算你的程序不是像联系人那样 向右推进 也可以用UINavigationController 管理你的ViewController的层次 可以自己写View切换的动画 关掉他默认的动画
      • 文档: http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html
    • UIWindow 还有个蛋疼的UIWindow 都快忘了他了 因为iOS是从Mac os X过来的 很多东西直接拿来用 这个UIWindow就是 在iOS里 每个App独占屏幕 所以同时存在的只有一个UIWindow 除了在程序加载的时候把我的view 加载到他上 目前我还没用到过其他的
    • 苹果一直很推崇MVC的程序结构 视图 模型 控制器 简单说就是 视图负责显示内容 模型负责所有数据的保存结构或者一些其他数据操作 控制器是用来协调 视图和模型 举车的发动机系统的例子 视图是仪表盘 模型是发动机 控制器是控制芯片
  • Core Data --- 管理数据 OBJC
    • 刚学的时候觉得 CD很高深 其实他是最容易用的库之一 他麻烦之处在于多线程问题 还有胶水代码的问题
    • 建立一个 基于Core Data的工程 你会看到他自动创建3个类的对象
      • NSManagedObjectModel
        • 管理数据的存储结构文件 扩展名是 xcdatamodeld
      • NSPersistentStoreCoordinator
        • 用来管理底层数据的存储 用官方的话说

          Core Data is not a relational database or a relational database management system (RDBMS).

        • 所以你可以用很多方法存储数据 比如最长用的sqlite 当然如果另类也可以用plist文件 或者其他
      • NSManagedObjectContext
        • NSManagedObjectContext 把上面两个对象连在一起 把他们变成一个整体
        • 所有的CD操作都是通过这个类的 这个需要仔细看文档了
      • 举个不恰当的例子 就像三个人收拾衣服 一个人负责衣服的存放位置(NSManagedObjectModel) 一个人负责把衣服分类 冬天穿 夏天穿等(NSPersistentStoreCoordinator) 一个人负责协调他们的工作 并且如果有新增加的衣服或者要移除之前的衣服 通知他俩(NSManagedObjectContext)
    • NSManagedObject 这个类是具体的数据对象 用上面的例子说就是衣服
      • 一般都是继承这个对象 XCode 可以帮你做 具体搜搜 这种文章很多
    • NSFetchRequest
      • 用来执行CD请求的 相当与select语句外壳
    • NSEntityDescription
      • 用来描述实体的 对应sql里的table
    • NSPredicate
      • 谓语 类似select语句中的条件
    • 上面这三个类就可以用来请求数据了 具体看教程吧
    • 中文介绍:http://c.gzl.name/archives/tag/core-data (访问需要点技术...)
    • 文档: http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/coredata/cdprogrammingguide.html

掌握上面的内容 差不多就能写个APP了 最好的学习方法就是边写边学 自己构想一个小的APP 在做的时候遇到问题 去找找资料 我觉得这样学习比较快 也比较扎实
下面这些库都是有专门功能的库

  • Core Animation --- 制作动画 很强大 很喜欢的框架 可以用少量的代码写出漂亮的动画 C
  • Quartz 2D --- 强大的2D绘图库 C
  • OpenGL --- 不用介绍了 超级强大的3D库 C
  • Core Image --- 听说 iOS5开始支持Core Image 了 还没去看 Mac 上的CI是很强大的
  • CFNetwork --- 从来没用过 我一般都会用ASIHttpRequset 封装好的高层网络库 OBJC实现的 CFNetwork 好像是C实现
  • Core Location --- 获取位置的库 东西很少 很简单 OBJC
  • AVFoundation --- 播放视频相关的库 最近正在学习

这些算是学iOS开发的一些方法 当时要是有人告诉我这些 估计少走不少弯路
======================================================================

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:Owen
链接:https://www.zhihu.com/question/20016551/answer/33781602
来源:知乎

首先,基础很重要,其实就是学校的课程。数据结构和算法,设计模式,编译原理,操作系统原理,再掌握一门语言比如c/c++,你会发现很多底层的类库都是C写的。而且可以混编,特别是一些第三方的类库直接就是C++写的。其他的包括T-Sql,html,js等你也可以了解下,因为基于hyper link方式的开发也在发展。
然后,你就要看看iOS开发的武器库了。入门的话可以看看基本数,很好理解也很实用。
1.Beginning.iOS.5.Development.Exploring.the.iOS.SDK.Dec.2011
2.Learn_Objective-C_for_Java_Developers/ Objective-C编程之道
3.iOS 7 Programming Cookbook
这三本看下来你可以做一些下项目了,但是这是远远不够的,可能你知道但是用的时候就知道有些细节或者背后的机制没有了解清楚,这个时候就要看文档了。我不得不得不感慨,苹果的文档写的太好了。我之前的列表,楼主可以参考一下
一.预览篇

1.Start Developing iOS Apps Today
Start Developing iOS Apps Today: iOS Technologies
#//apple_ref/doc/uid/TP40011343-CH11-SW1

2.iOS 2 Design Resources

Designing Great Apps.

①.iOS 7 UI Transtion Guide

②.iOS Human Interface GuideIines

③.UIKit User Interface Catelog

二.基础篇

1.Objective-C Runtime Programming Guide

Objective-C Runtime Programming Guide: Introduction
Introduction/Introduction.html#//apple_ref/doc/uid/TP40008048

2.Programming With Objective-C

Programming with Objective-C: About Objective-C
Introduction/Introduction.html#//apple_ref/doc/uid/TP40011210

3.iOS Technology Overview

iOS Technology Overview: About the iOS Technologies
Introduction/Introduction.html#//apple_ref/doc/uid/TP40007898-CH1-SW1

4.View Programming Guide for iOS

View Programming Guide for iOS: View and Window Architecture
WindowsandViews/WindowsandViews.html#//apple_ref/doc/uid/TP40009503-CH2-SW1

5.View Controller Programming Guide for iOS

View Controller Programming Guide for iOS: About View Controllers
Introduction.html#//apple_ref/doc/uid/TP40007457

6.Scroll View Programming Guide for iOS

Scroll View Programming Guide for iOS: About Scroll View Programming
Introduction/Introduction.html#//apple_ref/doc/uid/TP40008179

7.Table View Programming Guide for iOS

Table View Programming Guide for iOS: Managing Selections
/ManageSelections/ManageSelections.html#//apple_ref/doc/uid/TP40007451-CH9-SW10

补充:Coding Guidinglines for Cocoa

Coding Guidelines for Cocoa: Introduction to Coding Guidelines for Cocoa
CodingGuidelines.html#//apple_ref/doc/uid/10000146i

三.技术篇

1.Auto Layout Guide

Auto Layout Guide: Introduction
Introduction/Introduction.html#//apple_ref/doc/uid/TP40010853

2.Advanced Memory management Programming Guide

Advanced Memory Management Programming Guide: About Memory Management
MemoryMgmt.html#//apple_ref/doc/uid/10000011i

3.Transitioning to ARC Rellease Notes

https://developer.apple.com/library/ios/releasenotes/ObjectiveC/RNTransitioningToARC/
Introduction/Introduction.html#//apple_ref/doc/uid/TP40011226

4.Threading Programming Guide

Threading Programming Guide: About Threaded Programming
AboutThreads.html#//apple_ref/doc/uid/10000057i-CH6-SW2

5.Networking Programming Topic

Networking Programming Topics: Introduction
Introduction/Introduction.html#//apple_ref/doc/uid/TP40012488

6.Core Data Programming Guide

Core Data Programming Guide: Managed Object Models
#//apple_ref/doc/uid/TP40002328-SW1

7.Core Data Model Versioning And Data Migration

Core Data Model Versioning and Data Migration Programming Guide: Core Data Model Versioning and Data Migration

8.Core Image Programming Guid

Core Image Programming Guide: About Core Image

9.Core Animation Propramming Guid

Core Animation Programming Guide: Core Animation Basics
//apple_ref/doc/uid/TP40004514-CH2-SW3

补充:Concurrency Programming Guide

Concurrency Programming Guide: Concurrency and Application Design
/ConcurrencyandApplicationDesign/ConcurrencyandApplicationDesign.html#//apple_ref/doc/uid
/TP40008091-CH100-SW1

iTunes Connection Developer Guild

https://developer.apple.com/library/ios/documentation/LanguagesUtilities/Conceptual/iTunesConnect_Guide/Chapters/About.html#//apple_ref/doc/uid/TP40011225-CH1-SW1

这些不是说一下子看过,根据工作的情况。看完这些的话你会有一个质的飞跃。这些基本上涵盖你开发当中常用的方面。遇到问题可以到CocoaChina,StackOverflow等问答网站去问,还有就是看每年的WWDC的视频,算是对文档的补充。

最后,通过实际的项目综合提高自己,不做项目谈技术都是耍流氓,具体有几个方面。关注高手写的博客,文章质量都很高,非常有助于提高。还有就是研究开源的类库,比如AFNetworking,SDWebImage等,会综合提高你的编程技巧。再加上不断的实践,不断提高。然后过搞搞Git,常去GitHub看看,你会发现很多的好的东西。
推荐几个自己经常去的一些博客和网站
唐巧的技术博客
objc中国
Ray Wenderlich
CocoaDocs.org
NSHipster
Luke's Homepage
Cocoabit | 做自己喜欢的事情

当然,以上知道技术上的东西。你最好还要知道点设计,懂点用户,知道点市场就更好了。希望能帮到你!

===================================================================

推荐一本书,《iOS应用逆向工程》http://book.douban.com/subject/25826902/ 这里面就有相关的关于iOS底层的一些原理。

对于实现方法这些,推荐一本《Objective-C编程之道:iOS设计模式解析》http://book.douban.com/subject/6920082/

如何学习ios(摘自知乎https://www.zhihu.com/question/20016551)的更多相关文章

  1. (转自知乎https://www.zhihu.com/question/20794107)动态代理

    作者:雨夜偷牛的人链接:https://www.zhihu.com/question/20794107/answer/23330381来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...

  2. 转 https://www.zhihu.com/question/27606493/answer/37447829

    著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:梁川链接:https://www.zhihu.com/question/27606493/answer/37447829来源: ...

  3. https://www.zhihu.com/question/52020960#answer-47024535

    https://www.zhihu.com/question/52020960#answer-47024535

  4. MVC到底是设计模式还是一种框架还是一种架构? https://www.zhihu.com/question/31079945

    具体知乎讨论内容:https://www.zhihu.com/question/31079945 MVC到底是设计模式还是一种框架还是一种架构? 我认为它是3种设计模式的演变和组合:观察者模式(Obs ...

  5. 买房的贷款时间是否是越长越好?https://www.zhihu.com/question/20842791

    买房的贷款时间是否是越长越好?https://www.zhihu.com/question/20842791

  6. 什么是动态规划?动态规划的意义是什么?https://www.zhihu.com/question/23995189

    阮行止 上海洛谷网络科技有限公司 讲师 intro 很有意思的问题.以往见过许多教材,对动态规划(DP)的引入属于"奉天承运,皇帝诏曰"式:不给出一点引入,见面即拿出一大堆公式吓人 ...

  7. HTML5之WebSocket && https://zhuanlan.zhihu.com/p/23467317

    在认识websocket之前,我们必须了解的是websocket有什么用? 他能解决我们遇到的什么问题? 如果没用,那么我们就么有使用它的必要的. websocket就是建立起全双工协议的,提高了效率 ...

  8. 打造安全的App!iOS安全系列之 HTTPS

    如何打造一个安全的App?这是每一个移动开发者必须面对的问题.在移动App开发领域,开发工程师对于安全方面的考虑普遍比较欠缺,而由于iOS平台的封闭性,遭遇到的安全问题相比于Android来说要少得多 ...

  9. iOS学习——iOS视频和推荐网站

    最近有人问有没有iOS学习的相关资料,就简单的把自己的知道的和资源共享一下: 个人感觉iOS开发人才饱和,培训泛滥,个人推荐后台升职空间大和web前端竞争小. [链接][Ronda收集整理]2014年 ...

随机推荐

  1. Spring Boot教程(十二)整合elk(1)

    elk 简介 Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等. Logstash是 ...

  2. git创建公钥匙

    目的: 使用SSH公钥可以让你在你的电脑和码云通讯的时候使用安全连接(git的remote要使用SSH地址) 1.打开终端进入.ssh目录输入当下命令 cd ~/.ssh 如果.ssh文件夹不存在,执 ...

  3. SQL server 安装教程

      双击sql server 2008的.exe安装文件,进入[SQL Server 安装中心]. 点击界面左侧的[安装],然后点击右侧的[全新SQL Server 独立安装或向现有安装添加功能],进 ...

  4. SQL Server新老版本CE区别

    对比CE7和2014 CE12的区别: 1.表连接中连接列估算方式 老CE对所有参与连接列的统计信息step进行逐个估算.新CE只对于最大和最小step统计信息进行收集估算,在连接列的值分布不均匀的时 ...

  5. 一、基础篇--1.1Java基础-String、StringBuilder、StringBuffer

    String.StringBuilder.StringBuffer 主要区别在两点上: 速度效率上对比:StringBuilder>StringBuffer>String 线程安全上来说: ...

  6. 网站模板-Layui:Layui

    ylbtech-网站模板-Layui:百科 layui,是一款采用自身模块规范编写的前端 UI 框架,遵循原生 HTML/CSS/JS 的书写与组织形式,门槛极低,拿来即用.其外在极简,却又不失饱满的 ...

  7. WPF DevExpress Chart控件 界面绑定数据源,不通过C#代码进行绑定

    <Grid x:Name="myGrid" Loaded="Grid_Loaded" DataContext="{Binding PartOne ...

  8. Python学习之==>函数

    一.函数是什么: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需要调用函数名就行. 二.函数的作用: 1.简化代码 2.提高代码的复用性 3.代码可扩展 三.定义函数: ...

  9. Web Service自动化测试知识点导图

  10. 解析jmeter阶梯加压与请求的计算

    用百度做例子 我们设置阶梯加压线程组的请求参数,如下图 上图表示 1:每隔2秒钟,会在1秒内启动5个线程 2:每次线程加载之后都会运行2s然后开始下一次线程加载 3:最终会加载50个线程并持续运行30 ...