关于 Objective-C

Objective-C是你写OS X(maxOS)程序和iOS程序的首选语言。它作为C语言的一个超集(即C语言是它的一部分)提供了面对对象的特性和动态运行时runtime。它继承了C语言的语法,基本类型,和控制流并加入了定义方法的语法。他提供了动态类型动态绑定,同时对对象图管理,object literals(极其方便地定义数组等对象的方法——一个语法糖) 提供了语言层面上的支持。

概述

这个文档引入了大量的用法例程来介绍Objective-C语言。你将会学到如何创建你自己的类来描述自定义对象和怎样使用CocoaCocoa Touch提供的一些框架类。尽管这些框架类并不是语言的一部分,但使用Objective-C编程时,这些类的使用是不可避免的。许多语言级别的特性也依赖于这些类所提供的行为。

程序是由一个对象网络构建的

当你为OS X和iOS构建程序时,你大部分时间都在于对象打交道。这些对象是Objective-C类的实例。这些类可以是由CocoaCocoa Touch提供的,也可以是你自己写的类。
如果你要写你自己的类,要在开始处提供对这个类的描述,详细写出它的public interfaceinterface包括数据封装的公共特性`` propertiesproperties 用于相关数据的封装),和一系列的方法。方法声明是指,一个对象可以收到的信息,包括当使用这个方法时所需要参数。你还需要提供一个类的实现implementation,包括每一个你公开的方法的可执行代码。

相关章节:定义类Defining Classes对象的使用Working with Objects, 数据的封装Encapsulating Data

用类别Categories扩展已经存在的类

如果你想要给一个已存在的类添加很少的特性,最好不要构建一个全新的类。更好的方法是定义一个类别category来给一个已经存在的类添加自定义特性。你可以用类别来给任何一个类添加方法,甚至那些你并没有原始的实现implementation代码的类,比如像Nsstring这样的框架类。

如果你有你想修改的类的源代码,你可以通过类扩展class extension来添加特性,或者修改原有特性的属性。类扩展一般用于隐藏私有行为,用在有源代码文件或私有的自定义框架的实现中。

相关章节:定制已有的类Customizing-Existing-Classes

用协议protocols定义信息传输方式

大部分Objective-C app 的工作都是由对象间的数据的传输而产生的。这些信息(即方法)一般是被在类的interface中显示声明的方法定义的了。但是,有时候定义一组不直接绑定到某个特定类的相关的方法也是很有用的。

Objective-C用协议protocol来定义一组相关的方法。例如一个对象调用它的委托delegate,这些方法可以是可选的optional或者要求的required。任何一个类都可以声明它遵循这个协议protocol,但是这个类的实现implementation中必须包含所有在这个protocol中的标记为required的方法。

相关章节:协议的使用Working-with-Protocols

Objective-C的对象通常是值values和集合Collections

在Objective-C中经常用CocoaCocoa Touch类来代表值。类Nesstring 用于字符串;类NSNumber用于不同类型的数字,包括整数,浮点数等等;类NSValue用于其他的值,比如C的结构体。你还可以使用任何C中的原始类型,比如intfloatchar

集合通常是一个集合类的实例,比如集合类NSArray,NSSet,NSDictionary。这些集合类都是用于收集其他Objective-C类的。

相关章节:值与集合类型Values-and-Collections

blocks简化了一般的任务

Blocks是C,Objective-C和C++的一个语言特性,用来表示一个工作单元。Blocks压缩一块代码和它被捕获的状态,这使它们更像是其他编程语言中的闭包closures。块Blocks经常用于简化一般的任务,比如枚举集合,分类和测试。Blocks还能更容易地使用中央调度等技术(GCD)安排任务并发或异步执行。

相关章节: 使用块Working-with-Blocks.

错误对象Error Objects用在运行时错误中

虽然Objective-C语法中包含异常处理,但Cocoa and Cocoa Touch只在处理编程错误(比如数组越界访问)时提示异常。这些错误应该在你的app上架之前解决。

其他的一切错误,包含运行时问题,比如耗尽磁盘空间,或者连不上一个网页。这些问题都是由NsError类的实例来显示的。为了良好的用户体验,你应该提前预判这些可能发生的错误,并且在错误发生时提供最好的解决方案给用户。

相关章节:错误处理Dealing-with-Errors

Objective-C编程应遵守命名规则

当你在进行Objective-C编程时,你应当记住一些已建立的命名规则。比如方法的命名:以小写字母开头,使用驼峰式大小写多个单词,例如,doSomething或者doSomethingElse。并不只是大写一些字母很重要。重要的是尽可能的让你的代码有更好可读性。这就意味着,你的方法名要很有表现力,但是不能太冗长。

另外,如果你想充分利用语言和框架的优势,还有一些其他的命名规则是你要遵守的。比如属性访问器方法必须严格遵守命名规则,这样才能用Key-Value Coding(KVC) 或者Key-Value Observing(KVO)这样的技术。

相关章节: 命名规则Conventions

预备知识

如果你是iOS或者OS X开发的新手,你在看这篇文档之前应该先通过看Start Developing iOS Apps Today或者Start Developing Mac Apps Today来了解开发iOS和OS X应用程序的一般过程。另外,为了完成每一章节后面的练习,你应该熟悉Xcode的使用方法。Xcode 是开发iOS和OS X应用程序的集成开发环境(IDE,Integrated Development Environment)。你将会用它来写你的代码,设计你app的用户界面,测试你的应用程序,并且调试任何的问题。

尽管这个文档包含一些基础C语言特性的例程,比如流程控制语句。但是如果你有一定的C语言基础或者熟悉其中一种以C语言为基础的语言,例如Java或者C#,学习该文档的效果会更好。如果你有其他高级编程语言的基础,比如Ruby或者Python,你应该可以看懂这个文档的内容。

这篇文档合理的包含了一些面对对象编程的原则,尤其是那些适用于Objective-C环境的,但是,你至少要有一点基础的面对对象的观念。如果你不熟悉这些观点,你应该读一下相关章节Concepts in Objective-C Programming(生肉)。

其他

这篇文章的内容适用于Xcode4.4和它以后的版本,并且我们假定你的目标是OS Xv10.7或者更新的版本。想要了解更多有关Xcode的知识,可以看Xcode User Guide。想知道关于语言特性的可用性,请移步Objective-C Feature Availability Index(生肉)。

Objective-C apps 用引用计数的方法来决定一个对象的声明周期。大多数情况下,编译器的自定引用计数(ARC)功能会帮你管理好这些。如果你觉得在某些情况下用ARC并不好,或者需要转换或者维护关系到对象储存的遗留代码,你应该读Advanced Memory Management Programming Guide(生肉)。

除了编译器,Objective-C语言用一种运行时系统来支持它的动态性和面向对象性。虽然你不需要经常关心Objective-C是如何运作的,你还是可以直接与这个运行时系统交互,通过学习Objective-C Runtime Programming GuideObjective-C Runtime Reference(生肉)。