关于Objective-CObjective-C是为OS X和iOS编写软件时使用的主要编程语言。它是C编程语言的超集,提供面向对象的功能和动态运行时。Objective-C继承了C语言的语法、基本类型和流控制语句,并增加了定义类和方法的语法。它还增加了对对象图管理和对象文本的语言级支持,同时提供了动态类型和绑定,将许多职责延迟到运行时。
Objective-C概述本文档介绍了Objective-C语言,并提供了大量使用示例。你将了解如何创建自己的类来描述自定义对象,并了解如何使用Cocoa和Cocoa Touch提供的一些框架类。尽管框架类与语言是分离的,但它们的使用紧密地结合在Objective-C的编码中,许多语言级别的特性依赖于这些类提供的行为。
应用程序是由对象网络构建的
在为OS X或iOS构建应用程序时,你将花费大量时间处理对象。这些对象是Objective-C类的实例,有些是Cocoa或Cocoa Touch提供的,有些是你自己写的。
如果你正在编写自己的类,那么首先要提供类的描述,详细说明该类实例的公共接口。此接口包括用于封装相关数据的公共属性,以及方法列表。方法声明指示对象可以接收的消息,并包含在调用方法时所需的参数信息。你还将提供一个类实现,其中包括接口中声明的每个方法的可执行代码。
相关章节:定义类,处理对象,封装数据
类别扩展现有类
与其创建一个全新的类来在现有类上提供次要的附加功能,还不如定义一个类别来向现有类添加自定义行为。你可以使用类别向任何类添加方法,包括你没有原始实现源代码的类,如NSString之类的框架类。
如果你拥有类的原始源代码,则可以使用类扩展来添加新属性,或修改现有属性的属性。类扩展通常用于隐藏私有行为,以便在单个源代码文件中使用,或者在自定义框架的私有实现中使用。
相关章节:自定义现有类
协议定义消息传递契约
Objective-C应用程序中的大部分工作都是对象互相发送消息的结果。通常,这些消息是由类接口中显式声明的方法定义的。然而,有时能够定义一组不直接绑定到特定类的相关方法是很有用的。
Objective-C使用协议来定义一组相关的方法,比如一个对象可能会调用它的委托的方法,这些方法要么是可选的,要么是必需的。任何类都可以表明它采用协议,这意味着它还必须为协议中所有必需的方法提供实现。
相关章节:使用协议
值和集合通常表示为Objective-C对象
在Objective-C中使用Cocoa或Cocoa Touch类来表示值是很常见的。NSString类用于字符串,NSNumber类用于不同类型的数字(如整数或浮点数),NSValue类用于其他值(如C结构)。你还可以使用C语言定义的任何基本类型,比如int、float或char。
集合通常表示为一个集合类的实例,如NSArray、NSSet或NSDictionary,它们分别用于收集其他Objective-C对象。
相关章节:值和集合
块简化了常见的任务
块是C、Objective-C和c++中引入的一种语言特性,用来表示一个工作单元;
它们封装了一块代码和捕获的状态,这使得它们类似于其他编程语言中的闭包。块通常用于简化常见的任务,如集合枚举、排序和测试。它们还使得使用诸如Grand Central Dispatch (GCD)之类的技术来为并发或异步执行调度任务变得很容易。
相关章节:处理块
用于运行时问题的错误对象
虽然Objective-C包含了异常处理的语法,但是Cocoa和Cocoa Touch只对编程错误使用异常(比如数组越界访问),这些错误在应用程序发布之前应该被修复。
所有其他错误——包括运行时问题,如磁盘空间耗尽或无法访问web服务——都由NSError类的实例表示。你的应用程序应该为错误做好计划,并决定如何最好地处理它们,以便在出错时呈现最佳的用户体验。
相关章节:处理错误
Objective-C代码遵循既定的惯例
在编写Objective-C代码时,你应该记住一些已建立的编码惯例。例如,方法名以小写字母开头,对多个单词使用驼峰大小写;
例如,doSomething或doSomethingElse。然而,重要的不仅仅是唯一;
你还应该确保你的代码尽可能具有可读性,这意味着方法名称应该具有表达性,但不要太冗长。
此外,如果希望利用语言或框架特性,还需要一些约定。例如,属性访问器方法必须遵循严格的命名约定,以便使用键值编码(KVC)或键值观察(KVO)等技术。
相关章节:编程约定
先决条件和学习准备如果你是OS X或iOS开发者,你应该阅读开始开发iOS应用或开始开发Mac应用,在阅读本文之前,得到一个总体概述iOS和OS X应用程序开发过程的另外,你应该熟悉Xcode之前试图遵循大多数章节的练习结束时在这个文档。Xcode是用于为iOS和OS X构建应用程序的IDE;
你将使用它来编写代码、设计应用程序的用户界面、测试应用程序和调试任何问题。
虽然最好对C语言或基于C的语言(如Java或c#)有一定的了解,但本文确实包含了一些C语言基本特性(如流控制语句)的内联示例。如果你了解另一种高级编程语言(如Ruby或Python),你应该能够理解其中的内容。
本文对一般的面向对象编程原则进行了合理的介绍,特别是当它们在Objective-C环境中应用时,但是假定你至少对基本的面向对象概念有一定的了解。如果你不熟悉这些概念,你应该阅读Objective-C编程概念中的相关章节。
另请参阅本文档中的内容适用于Xcode 4.4或更高版本,并假设你的目标是OS X v10.7或更高版本,或iOS 5或更高版本。有关Xcode的更多信息,请参见Xcode概述。有关语言特性可用性的信息,请参见Objective-C特性可用性索引。
Objective-C应用程序使用引用计数来确定对象的生存期。在大多数情况下,编译器的自动引用计数(ARC)特性会为你处理这个问题。如果你无法利用ARC,或者需要转换或维护手动管理对象内存的遗留代码,你应该阅读Advanced memory Management Programming Guide。
【入门编程介绍 –
Objective-C编程快速入门教程】除了编译器,Objective-C语言还使用运行时系统来支持其动态和面向对象的特性。虽然你通常不需要担心Objective-C是如何“工作”的,但是你可以直接与这个运行时系统交互,就像Objective-C运行时编程指南和Objective-C运行时参考所描述的那样。
推荐阅读
- 定义类 – Objective-C编程快速入门教程
- Core Foundation编程概念全解
- Objective-C线程技术(线程同步和线程安全)
- Objective-C运行时Runtime完全解读
- iOS内存管理(引用计数、Runloop、AutoreleasePool和引用循环)
- 快速了解iOS内存管理
- 内存管理之(__bridge、__bridge_transfer、__bridge_retained)
- GUI编程基本原理之(event loop和run loop(运行循环))
- Objective-C内存管理完全解读