OC编程 介绍

Objective-C是为OS X和iOS编写软件时使用的主要编程语言。它是C编程语言的超集,提供面向对象的功能和动态运行时。Objective-C继承了C的语法、基本类型和流控制语句,并添加了定义类和方法的语法。它还为对象图管理和对象文本添加了语言级别的支持,同时提供动态类型和绑定,将许多职责推迟到运行时。

本文介绍了Objective-C语言,并提供了大量的使用示例。您将学习如何创建描述自定义对象的类,并了解如何使用Cocoa和Cocoa Touch提供的一些框架类。虽然框架类与语言是分离的,但是它们的使用与Objective-C紧密地结合在一起,许多语言级别的特性依赖于这些类提供的行为。

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

当为OS X或iOS构建应用程序时,您将花费大量的时间处理对象。这些对象是Objective-C类的实例,其中一些是由Cocoa或Cocoa Touch提供给您的,其中一些是您自己编写的。

如果您正在编写自己的类,那么首先提供一个类的描述,该描述将面向对象的公共接口详细描述为类的实例。该接口包括公共属性来封装相关数据,以及方法列表。方法声明表示一个对象可以接收到的消息,并且在调用方法时包含有关所需参数的信息。您还将提供一个类实现,其中包括在接口中声明的每个方法的可执行代码。

类别扩展现有的类

与其创建一个全新的类来在现有类上提供次要的额外功能,还不如定义一个类别来将自定义行为添加到现有类中。可以使用category向任何类添加方法,包括没有原始实现源代码的类,比如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对象。

block 简化了常见工作任务

block 是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开发,您应该先阅读Start Developing iOS Apps Today 或者 Start Developing Mac Apps,得到iOS和OS X应用程序开发过程的一个总体概述。另外,在练习此篇文档中的大多数章节前,您应该先对Xcode已经很熟悉了。Xcode是用于为iOS和OS X构建应用程序的IDE;您将使用它来编写代码、设计应用程序的用户界面、测试应用程序以及调试任何问题。

尽管对C语言或Java或c#这样的基于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,或者需要转换或维护管理对象内存的遗留代码,您应该阅读 高级内存管理编程指南

除了编译器之外,Objective-C语言使用一个运行时系统来启用它的动态和面向对象特性。虽然您通常不需要担心Objective-C“工作”的方式,但是可以直接与这个运行时系统交互,正如Objective-C运行时编程指南Objective-C运行时引用 所描述的那样。

免责声明:以上内容均来自官方文档 Programming with Objective-C ,在 有道翻译 的基础上进行修改整理,仅用于个人学习。因个人水平有限,如果存在错误,请读者谅解并指出,非常感谢!
    原文作者:七度晚风
    原文地址: https://www.jianshu.com/p/03ba155818f9
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞