##关于Objective-C(简称OC)
给iOS和OS X写程序的时候,Objective-C是程序员使用的主要语言。OC是C语言的一个扩展集,提供了面向对象的特性和一个动态运行时。
OC的语法,基本类型,控制流语句也都是从C语言继承而来,并且还加入了定义类和方法的语法。OC也添加了语言级别的对象图形管理和对
象标示符支持,来提供动态分型和动态绑定,把很多事情延迟到运行时。
###内容惊鸿一瞥
本文档介绍了OC语言和一些扩展的例子。学习怎么创建自定的类来描述对象,如何使用Cocoa和Cocoa Touch提供的框架类。虽说框架时独立
与语言存在的,但是很多的特性和框架类密不可分。
###一个App是用对象的网络构建起来的
写iOS和OS X的App,主要就是和对象打交道。对象是OC类的实例,有Cocoa提供的类,也有自己定义的类。
如果你要开始创建自己的类,就开始从描述那个类下手,自习想想这个类的实例对象的公共接口是什么样子的。这个接口包括了封装了相关
数据的共用属性,还有一系列方法。方法的声明显示的是对象可以接受的消息,在任何时候被调用的时候方法可以接受的参数信息。自定类
中还要包括一个实现,视线中包括了之前在接口中声明的所有方法的可执行代码。
###用“分类”来扩展现有的类
为了给现有的类增加一点小功能,犯不上创建一个全新的类,可以通过定义一个“分类”来给现有的类增加自定的行为。使用分类可以给任
何类增添方法,即使是框架里面的那些你没有源代码的类,比如NSString。
如果你拥有现有类的源代码,可以使用一个类扩展来增加新的属性,或者说修改现有的属性。类扩展经常用来吧一个私有行为隐藏在单个源
文件或者一个自定的框架实现中。
###“协议”定义消息规范
OC程序里最常发生的操作其实是对象之间互相发消息。一般来说,这些消息是通过方法的形式显式地定义在类的接口中。但是有时候,一组
相关的类是不一定是直接绑定在某个特定的类上的。
OC使用协议来定义一组相关的方法,比如那些对象会在委托中调用的方法,可以设置成必须实现也可以设置成可选实现。任何类都可以选择
实现一个协议,也就是说,这个类必须要实现协议中定义的必须实现的方法。
###值类和集合类常被包装成OC对象
一般OC会用Cocoa中的类来表示值类。NSString类用来表示字符串,NSNumber类用来包装整型或浮点型数字,NSValue类则用来包装其他的类
型,比如C语言的结构体。你也可以使用C语言中的基本类型,比如int,float,或者char。
集合类会包装成Cocoa集合类的实例来使用,比如NSArray数组,NSSet集合,或者NSDictionary字典,都可以用来作为OC对象的集合。
###“代码块”简化一般任务
代码块是C,OC,C++都已经引入的语言特性,用来代表一个工作单元;代码块会用一对花括号包装一块代码,看上去很像其他语言里的闭包
。代码块经常用来简化一般的任务操作,比如集合类中的枚举,排序,测试操作。代码块也可以使得使用GCD技术的并发或者异步的多任务
操作变得更简单。
###用在运行时问题的Error对象
虽然OC包含了异常处理的语法,但是Cocoa只会在出现编译时错误的时候使用异常(比如数组访问越界),这些问题在App发布之前就应该修
正。
所有其他的错误,运行时错误,比如磁盘空间溢出或者网络服务故障,都被包装成NSError类的实例。你的程序应该有所准备并且做出处理
,来确保良好的用户体验。
###OC代码要遵循现有的代码规范
写OC代码,应该时刻记住几条代码规范。方法名应该小写字母开头,之后用驼峰命名,蔽日doSomething和doSomethingElse。这不是说大写
字母有多重要,而是要确保你的代码具有一定的可读性,方法的名称应该具有意义,但是也不要太过冗长。
另外,有一些规则在使用框架或者语言特性的时候是必须遵守的。比如属性访问器方法必须遵守严格的命名规范以配合比如KVC和KVO这些技
术。
##前导知识
如果你是开发新手,在学习这份文档之前,先去看看Start Developing iOS Apps Today文档,对iOS程序开发有一个通盘的了解。另外你还
要比较熟悉Xcode的基本用法,Xcode是开发程序的IDE工具;用Xcode来写代码,设计界面,测试应用,调试程序等等。
在语言上,有一些C语言基础或者基于C语言的系列语言的知识是不错的,本文档中确实包含了一些C语言的流程控制语句的示例代码。如果
你有其他的高级语言的经验,比如ruby或者Python,那也是可以的,接着往下吧。
另一个基本的前导知识是面向对象的一些基本概念,以及一些一般的面向对象的基本原则。要是完全没概念,推荐先去看相关章节 OC编程
概念。
OC使用ARC来管理对象的生命周期,ARC会管好这些事情,但是要是你没办法使用ARC,就需要自己关心好这些内存管理的事情,你应该看看
Advanced Memory Management Programming Guide文档。