摘自:Cocoa基本原理指南
根类提供了所有对象公有的基本行为和接口的定义。根类连同Objective-C语言,是Cocoa直接访问Objective-C运行环境或与之交互的基本途径。Cocoa对象的大部分对象行为能力都是从根类得到的。Cocoa提供了两个根类:NSObject
和NSProxy
。Cocoa将后者定义为抽象类,用于表示其它对象的替身对象。因此NSProxy
类在分布式对象架构中是很重要的。由于作用比较特别,NSProxy在Cocoa程序中出现频率很低。Cocoa开发者在提到根类时,几乎总是指NSObject
。
NSObject是大多数Objective-C类层次的根类,它没有超类。其它类从NSObject继承访问Objective-C语言运行时系统的基本接口,它们的实例可以得到对象行为的能力。NSObject不仅仅是一个类的名称,还是一个协议的名称。两者对于定义一个Cocoa对象都是必要的。NSObject协议指定了Cocoa中所有根类必须的基本编程接口,因此不仅NSObject类采纳了这个同名的协议,其它根类也采纳这个协议,比如NSProxy。NSObject类进一步指定了不作为代理对象的Cocoa对象的基本编程接口。
NSObject根类和它采纳的NSObject协议及其它“根” 协议一起,为所有不作为代理对象的Cocoa对象指定了如下的接口和行为特征:
<!--[if !supportLists]-->§ <!--[endif]-->分配、初始化、和复制。NSObject
类中的一些方法(包括一些来自协议的方法)用于对象的创建、初始化、和复制:
<!--[if !supportLists]-->§ <!--[endif]-->alloc
和allocWithZone:
方法用于从某内存区域中分配一个对象内存,并使对象指向其运行时的类定义。
<!--[if !supportLists]-->§ <!--[endif]-->init
方法是对象初始化原型,负责将对象的实例变量设置为一个已知的初始状态。initialize
和load
是两个类方法,它们让对象有机会对自身进行初始化。
<!--[if !supportLists]-->§ <!--[endif]-->new
是一个将简单的内存分配和初始化结合起来的便利方法。
<!--[if !supportLists]-->§ <!--[endif]-->copy
和copyWithZone:
方法用于拷贝实现这些(由NSCopying协议定义的)方法的类的实例。希望支持可变对象拷贝的类则需要实现mutableCopy
和mutableCopyWithZone:
(由NSMutableCopying
协议定义)方法。
<!--[if !supportLists]-->§ <!--[endif]-->对象的保持和清理。下面的方法对面向对象程序的内存管理特别重要:
<!--[if !supportLists]-->§ <!--[endif]-->retain
方法增加对象的保持次数。
<!--[if !supportLists]-->§ <!--[endif]-->release
方法减少对象的保持次数。
<!--[if !supportLists]-->§ <!--[endif]-->autorelease
方法也是减少对象的保持次数,但是以推迟的方式。
<!--[if !supportLists]-->§ <!--[endif]-->retainCount
方法返回对当前的保持次数。
<!--[if !supportLists]-->§ <!--[endif]-->dealloc
方法由需要释放对象的实例变量以及释放动态分配的内存的类实现。
<!--[if !supportLists]-->§ <!--[endif]-->内省和比较。NSObject
有很多方法可以查询对象的运行时信息。这些内省方法有助于找出对象在类层次中的位置,确定对象是否实现特定的方法,以及测试对象是否遵循某种协议。这些方法中的一部分仅实现为类方法。
<!--[if !supportLists]-->§ <!--[endif]-->superclass
和class
方法(实现为类和实例方法)分别以Class
对象的形式返回接收者的超类和类。
<!--[if !supportLists]-->§ <!--[endif]-->可以通过isKindOfClass:
和isMemberOfClass:
方法来确定对象属于哪个类。后者用于测试接收者是否为指定类的实例。isSubclassOfClass:
类方法则用于测试类的继承性。
<!--[if !supportLists]-->§ <!--[endif]-->respondsToSelector:
方法用于测试接收者是否实现由选择器参数标识的方法。instancesRespondToSelector:
类方法则用于测试给定类的实例是否实现指定的方法。
<!--[if !supportLists]-->§ <!--[endif]-->conformsToProtocol:
方法用于测试接收者(对象或类)是否遵循给定的协议。
<!--[if !supportLists]-->§ <!--[endif]-->isEqual:
和hash
方法用于对象的比较。
<!--[if !supportLists]-->§ <!--[endif]-->description
方法允许对象返回一个内容描述字符串;这个方法的输出经常用于调试(“print
object”命令),以及在格式化字符串中和“%@”指示符一起表示对象。
<!--[if !supportLists]-->§ <!--[endif]-->对象的编码和解码。下面的方法和对象的编解码(作为归档过程的一部分)有关:
<!--[if !supportLists]-->§ <!--[endif]-->encodeWithCoder:
和initWithCoder:
是NSCoding协议仅有的方法。前者使对象可以对其实例变量进行编码,后者则使对象可以根据解码过的实例变量对自身进行初始化。
<!--[if !supportLists]-->§ <!--[endif]-->NSObject类中声明了一些于对象编码有关的方法:classForCoder:、replacementObjectForCoder:
、和awakeAfterUsingCoder:
。
<!--[if !supportLists]-->§ <!--[endif]-->消息的转发。forwardInvocation:
和相关的方法允许一个对象将消息转发给另一个对象。
<!--[if !supportLists]-->§ <!--[endif]-->消息的派发。以performSelector...
开头的一组方法使您可以在指定的延迟后派发消息,以及将消息从辅助线程派发(同步或异步)到主线程。
NSObject还有几个其它的方法,包括一些处理版本和姿态(后者使一个类在运行时将自己表示为另一个类)的类方法,以及一些访问运行时数据结构的方法,比如方法选择器和指向方法实现的函数指针。
分享到:
相关推荐
Cocoa基本原理指南-中文版.pdf Cocoa基本原理指南-中文版.pdf
在 Cocoa 的开发文档中,Cocoa 基本原理指南是介绍Cocoa 概念的初级文档,是诸如Cocoa 描画指南和 Cocoa 的视编程指南这类文档的先期读物。阅读Cocoa 基本原理指南需要的前提条件很少,但读者必须是 熟练的C 程序员...
Cocoa基本原理指南Cocoa基本原理指南Cocoa基本原理指南Cocoa基本原理指南
在Cocoa的开发文档中,Cocoa基本原理指南是介绍Cocoa概念的初级文档,是诸如Cocoa 描画指南和 Cocoa的视编程指南这类文档的先期读物。阅读Cocoa基本原理指南需要的前提条件很少,但读者必须是熟练的 C程序员,且...
Cocoa Fundamentals Guide 的中文版
cocoa基本原理指南,讲解了很多关于cocoa的一些基本知识,设计模式等知识。
iOS 和 macOS 性能优化书。iOS and macOS Performance Tuning Cocoa, Cocoa Touch, Objective-C, and Swift
cocoa基本原理指南和object c第二版 压缩包中包括: 其中Learning_Cocoa_with_Objective-C_2nd.pdf Learn Cocoa on the Mac.pdf Cocoa基本原理指南.rar
详细介绍 cocoa 框架的基本原理及运作方式,是想要学习cocoa及iphone编程的好资料