Programming with Objective-C --- 关于Objective-C

       Objective-C是用来开发OS X和iOS软件的主要编程语言。它是C语言的超集,提供了面向对象的特性和一个动态运行时环境。Objective-C 继承了C语言的语法、基本类型和流程控制语句,同时增加加了定义类和方法的语法。在提供动态类型和绑定,增加运行时职责(deferring many responsibilities until runtime)的同时为对象层次与结构(graph)和对象字面值添加语言级别的支持。

概述

       本(官方)文档介绍了Objective-C语言并提供了大量的使用案例。你将学会创建能够描述特定对象的类,了解如何使用Cocoa和Cocoa Touch提供的框架类。尽管这些框架类并不是该语言的一部分,但如果你使用Objective-C编程的话就少不了要用到它们,而且许多语言级别的特性还依赖于这些类提供的行为。

程序是由一系列的对象有机构成的

      当你为OS X和iOS开发程序的时候,你绝大部分时间是花在对象上。这些对象是Objective-C类的实例,其中有一部分类是由Cocoa和Cocoa Touch提供的,另外一部分是你自己写的。

       当你在写自己的类时,你首先需要描述你的类,也就是给出类实例的公共接口的细节。这个接口包括封装相关数据的公共属性,还有一系列的方法。方法定义指出对象可以接受的消息和调用时需要参数信息。当然,你还需要提供类的实现,其中包括接口中声明中每个方法的执行代码。

分类(category)扩展已有的类

      与为已有的类提供少量功能而创建全新的类相比,有时更合理的可能是定义一个分类来为已有的类来添加特定的行为。你可以使用分类来为任何类添加方法,包括你无法获得源代码的类,比如像NSString这样的框架类。

       如果你有一个类的源代码,你可以使用类扩展(class extension)来添加新的属性,或者修改已有属性的特征(attribute,比如只读改成可读写)。类扩展一般用于在单个源代码文件或在自定义框架的私有实现中来隐藏私有行为。

协议(protocol)定义消息约定(messaging contracts)

       对象之间互相发送消息就是Objective-C程序的主要工作。通常这些消息是直接定义在类接口中的方法。但有时定义一系列相关但不局限于某一个特定类的方法是很有用的。

       Objective-C使用协议来定义一系列相关方法,比如对象通过代理(delegate)来调用的方法,这些方法中有的是必须(required)实现有的是可选(optional)实现。任何类都可以声明它采用某个协议,这意味着它必须要提供协议中required方法的实现。

值和集合通常也用Objective-C对象表示

       在Objective-C中使用Cocoa或CocoaTouch类来表示值是很常见的。NSString类用来表示字符构成的字符串,NSNumber类可以表示诸如整数或浮点数等各种不同的数值类型,NSValue类用于其他值比如C结构体。当然你也可以使用C语言定义基本类型,比如int,float,char等。

       集合通常是指某种集合类的实例,比如NSArray,NSSet,NSDictionay等,它们用来存储其他Objective-C对象。

代码块(Blocks)简化了常规任务

      代码块是C,Objective-C和C++引进的用来表示一个工作单元的语言特性;它囊括了一段捕获了状态的代码,这使得它们类似于其他编程语言中的闭包。代码块经常用来简化像集合枚举,排序和测试这样的常规任务。它们也使得利用Grand Central Dispatch(GCD)技术进行并发任务调度或异步执行更加容易。

Error对象用来表示运行时问题

      尽管Objective-C拥有异常处理的语法,但Cocoa和Cocoa Touch只针对在程序运行之前需要解决的编程错误使用异常,如数组访问越界。

所有其他的错误包括像磁盘空间不够或无法访问网络服务这样的运行时问题都用NSError类的实例来表示。你的程序应该预期可能的错误并在出问题时能够做出最恰当的处理来给予用户最好的体验。

Objective-C代码遵从约定俗成的惯例

       当你在编写Objective-C代码时,有一些代码惯例是你应该牢记于心的。比如,方法名应以小写字母开头,如果有多个单词的话应采用骆驼命名法,像doSomething或doSomethingElse这样,而不仅仅是大写;你应该尽可能的保证你的代码的可读性,也就是说方法名要富于表现力,避免冗长。

除此之外,如果你想利用语言或框架的特性,那就还要注意几个惯例,比如:属性访问方法必须遵照严格的命名规定以使用Key-Value Coding(KVC)或Key-Value Observing(KVO)技术。

预备知识

      如果你是OS X或iOS开发新手,那么你在阅读该文档之前,因该通读一遍Start Developing iOS Apps Today 或者Start Developing Mac Apps Today,从而对iOS和 OS X开发流程有一个总体的了解。除此之外,在尝试实践该文档中每章末尾的练习之前你要能够熟悉使用Xcode。Xcode是一款专门用于构建iOS和OS X软件的 IDE,你可以用它编写代码,设计UI,测试以及调试各种问题。

      虽然熟悉C或基于C的语言比如Java或C#更好,但不熟悉也没关系,本文档中任然包括了介绍像流程控制语句这样的C语言特性的例子。如果你了解另一种高级编程语言,像Python或Ruby,你将能轻松的理解本文档的内容。

      本文档对于常见的面向对象编程原则也做到了一定程度的涉及,特别是将它们应用在Objective-C上下文中,但我们仍然假定你对面向对象概念有着起码的了解。如果你不熟悉这些概念的话,你应该阅读一下Objective-C Programming中的相关章节。

另请参阅

      该文档中的内容适用于Xcode 4.4或之后的版本,并假定你为OS X 10.7或iOS 5以及它们之后的版本开发软件。关于Xcode的更多信息,请查看Xcode Overview。关于更多的语言特性,请查看Objective-C Feature Availability Index。

      Objective-C程序使用引用计数来决定对象的生命周期。在绝大多数情况下,编译器的自动引用计数(Automatic Reference Counting,ARC)功能替你处理这一问题。如果你不能使用ARC,或需要维护手动管理对象内存的遗留代码,你需要阅读 Advanced Memory Management Programming Guide。

      除了编译器外,Objective-C还使用一个运行时系统来支持它的动态和面向对象特性。尽管通常你并不需要 知道Objective-C是怎么工作的,但和该运行时系统直接交互还是可能的,Objective-C Runtime Programming Guide 和Objective-C Runtime Reference对此有介绍。






你可能感兴趣的:(iOS开发基础)