Programming with Objective-C 翻译计

2017-07-15  本文已影响68人  ameerkat

关于 Objective-C

当你编写 OS X 和 iOS 软件时,Objective-C 将是你主要使用的语言。它对 C 语言进行了拓展,并提供了面向对象的特性和动态运行时。Objective-C 沿用了 C 语言的语法规则,原始类型,和控制流语句,并加入了定义类和方法的语法规则。它在提供动态绑定和动态派发,推迟重要事项到运行时执行的同时,也在语言层面上加入了对对象图管理以及对象字面量的支持。

一瞥

这份文档介绍了 Objective-C 语言并且大量的使用范例。你将会学到如何通过创建自己的类来自定义对象,并且学会如何使用 Cocoa 和 Cocoa Touch 库提供的类。 尽管这些库中的类与语言是分离的,但是对他们的使用是与 Objective-C 编程紧密结合在一起的,并且很多 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

集合通常以集合类型的实例的形式存在, 用于收集其他 Objective-C 对象,比如NSArray, NSSet, NSDictionary

Blocks 简化常规任务

Blocks 是一种被引入 C,Objective-C 和 C++ 的一种语言特性,用来表示工作的一个单元;Block 囊括了一块代码以及这块代码被捕获时的状态,这使得他们与其他编程语言中闭包的概念列斯。闭包通常被用于简化常规任务,如集合遍历,分类和测试。Block使用如GCD这样的技术也使得同步或异步作业的调度更加简单。

错误对象被用于运行时错误

尽管 Objective-C 包含异常处理的语法,但 Cocoa 和 Cocoa Touch仅在处理编程错误(如数组越界访问)时使用异常处理,并且异常应在应用下次运行前被修复。

所有其他的错误,包括运行时错误比如存储不够或无网络连接,可以被 NSError的类实例来表示。为了在出错时给用户最好的用户体验,你的应用应该对错误有所准备并弄清如何处理最好。

Objectice-C 的代码遵守已有的约定

当编写 Objectice-C 代码时,你应该牢记一些已有的编程约定。 比如,方法名以小写字母开头,如果有多个单词应使用驼峰命名法;比如, doSomething or doSomethingElse。并且,重要的不仅仅是大写,你还应该注意代码的可读性要好,这就意味着方法名表达性要好,但不至于太啰嗦。

除此之外,如果你想利用语言和框架的特性,还有一些要遵守的约定。比如,属性访问方法必须严格的遵守命名约定以利用如 Key-Value Coding (KVC) 和 Key-Value Observing (KVO) 这样的技术。

先决条件

如果你是第一次接触 OS X 或 iOS 开发,在阅读本文档之前,你应该先阅读一下 Start Developing iOS Apps TodayStart Developing Mac Apps Today 来对 iOS 和 OS X 应用开发有一个整体的了解。除此之外,在尝试大部分章节结尾的习题之前,你应该先熟悉 Xcode 的使用。Xcode 是用来搭建 iOS 和 OS X 应用的IDE。你将自己动手编写代码,搭建你应用的交互界面,测试你的应用,并且调试解决任何问题。

相关文献

这个文档中的内容适用于 Xcode 4.4 及其之后的版本并假定你使用的是 OS X c10.7 及其之后的版本,或 iOS 6 及其之后的版本。获取更多关于 Xcode 的信息,见 Xcode User Guide。获取更多关于语言特性可利用性,见 Objective-C Feature Availability Index

Objective-C 应用使用引用计数来管理对象的生命周期。 大部分时候,编译器的自动引用计数特性会替你负责对象的内存管理。如果你无法利用 ARC, 或者你需要转换或保留手动管理内存的遗留代码,你应该阅读 Advanced Memory Management Programming Guide

除了编译器,Objective-C 还使用一个运行时系统来保证其动态性和面向对象特性。虽然你并不经常需要考虑 Objective-C 是如何运作的,但还是有可能需要直接与这个运行时系统打交道,了解运行时,见 Objective-C Runtime Programming Guide and Objective-C Runtime Reference

上一篇下一篇

猜你喜欢

热点阅读