`
janedoneway
  • 浏览: 569336 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

NSObject官方介绍

 
阅读更多

From: http://blog.sina.com.cn/s/blog_62ba0fdd0100ve9b.html

 

 

SObject协议组对所有的Object-C下的objects都生效。

如果objects遵从该协议,就会被看作是first-class objects(一级类)。

另外,遵从该协议的objects的retain,release,autorelease等方法也服从objects的管理和在Foundation中定义的释放方法。一些容器中的对象也可以管理这些objects,比如

NSArray 和NSDictionary定义的对象。

Cocoa的根类也遵循该协议,所以所有继承NSObjects的objects都有遵循该协议的特性。

 

NSObjects采用的协议:

NSObject

NSObject是大多数Objective-C类的继承的根类;它没有父类。通过NSObject,其它类继承了一些基础的与Objective-C语言编译器系统之间的接口,并且获得了在它的实例中表现为一个对象的能力。

尽管NSObject不是一个严格的抽象类,实际上它已经是一个类。但是通过它自己一个除了表现为一个简单类之外,NSObject实际上几乎无法完成任 何有用的操作。为你的程序添加任何属性(attributes)并制定实现逻辑,你必须创建一个或者多个从NSObject继承或者父类从 NSObject继承的类(class)。

NSObject采用(adopts,或者说是继承实现)了NSObject协议(protocol)(见“Root Class—and Protocol”(第67页) ) 。NSObject协议(protocol)允许被多个根类(root class)采用,比如NSProxy另一根类(root class),并不是从NSObject继承,但却也采用了NSObject协议(protocol)所以它在Objective-C中便有了和NSObject类相似部分的类的定义(interface)和功能。

 

NSObject根类,和采用了NSObject协议或者其它根类协议(“root” protocols)一道,为所有的非代理(non-proxy)Cocoa对象指定了以下的定义(interface)和特有的事件:

■Allocation, initialization, 和 duplication。一些NSObject方法(包括一些采用的协议)用来处理创建(creation),初始化(initialization)和复制(duplication)对象。

❏alloc和allocWithZone:方法在内存中为一个对象分配了内存空间并且设置它指向的对象的编译器类定义(即是告诉编译器定义了一个类,译者注)。

❏init方法为对象的属性初始化(prototype),一个让实例变量初始化状态的进程。类方法中的initialize和load让一个类有机会初始化它们自己。

❏new一种方便的结合分配内存和初始化的方法。

❏copy和copyWithZone:方法复制任意对象的内存的实现方法(从NSCopying协议来的);mutableCopy和mutableCopyWithZone:(在NSMutableCopying协议中定义)将被应用于(mplemented by)该类来完成不定的对象拷贝(make mutable copies of their objects)。


■Object retention and disposa(对象的保留和释放)。接下来的方法对于面向对象的程序尤其的重要,那就是如何传统的,明确的,形式化的(traditional, and explicit, form)实现内存管理。

❏retain方法,增加对象的计数器。

❏release方法,减少对象的计数器

❏autorelease方法,自动减少对象的计数器,但是以推迟的方式来实现。

❏retainCount方法,返回一个对象当前的计数器

❏ dealloc方法应用于类来释放对象实例变量并释放动态内存。


■ Introspection 和 comparison(反省机制和对比机制).许多NSObject方法使你能够让编译器查询一个对象。反省方法(introspection methods)帮助你探查一个对象在类继承机制中的位置,决定是否实现一些方法,并测试它是否遵循一些协议。而一些类仅是有一些方法。

❏superclass和class方法(类和实例(class and instance))分别返回接收器的父类和类,作为一个Class对象。

❏ isKindOfClass:和isMemberOfClass:,通过这两种方法可以确定一个类的从属关系。后者测试一个接收器是否是一个指定类的实例;而后者可以测试类的从属关系。

❏ respondsToSelector: 方法测试一个接收器是否通过selector实现(implements)了一个标志符话的方法。而instancesRespondToSelector:测试了一个给定的类实例化之后(这个消息的接收方法为静态方法,译者注)是否实现了一个指定的方法。

❏conformsToProtocol:方法,测试接收器(对象或者类)符合一个给定的协议(protocol)。

❏ isEqual: 和 hash方法,用于对象比较。

❏ description方法,允许一个对象返回一个字符串来描述它的内容;这个常用于调试debugging (“print  object”命令 ) 。通过“%@”以字符串输出特殊的指定对象。(即是以NSLog的形式输出,译者注)

参见 “Introspection”(页87)以获取更多的信息

       ■ Object encoding and decoding(对象的编码和解码).接下来的方法将与对象的编码和解码方式有关 (作为一个归档处理的一部分):

❏encodeWithCoder: 和 initWithCoder:方法,NSCoding协议中仅有的组成成员。第一个允许对象编译它的实例变量,第二个允许一个对象初始化它自身的解码实例变量。

❏NSObject类声明了一些与对象编码相关的其它方法,有:classForCoder,replacementObjectForCoder:,和awakeAfterUsingCoder:。

    参阅Archives and Serializations Programming Guide for Cocoa来获取更多的信息。

    ■ Message forwarding(消息转发). forwardInvocation:允许一个对象把消息转发给另一个对象。

    ■ Message dispatch(消息配送). 一个以performSelector...为开头的方法允许你配送消息(message)直到指定的延迟后,并且可以从二级线程((synchronously or asynchronously)同步或者不同步地)配送消息到主线程。

       NSObject拥有许多其它的方法,比如版本和传递的类方法(class methods for versioning and posing)(之后将为你展示如何将一个类本身编译为另一个类)。它既包括了方法让你访问编译器数据结构的类,比如selector方法和函数指针形式的方法实现。

分享到:
评论

相关推荐

    iOS中NSObject的两种含义:类和协议详解

    前言 协议中<NSobject>是什么意思?...下面话不多说了,来一起看看详细的介绍吧 1. 区分:类的NSObject与协议的NSObject iOS开发中,苹果提供的一些系统类都属于NSObject的子类,例如UIColor类的定

    Objective-C 2.0 运行时系统编程指南

    Objective-C语言将决定尽可能的从编译和链接时推迟到运行时。只要有可能,Objective-C总是使用...本文档将具体介绍NSObject类以及Objective-C程序是如何和运行时系统交互的。特别地,本文档还给出来怎样在运行时动态地加

    IOS消息转发

    ios 消息转发示例 介绍如何使用 转发 和作用等相关信息 并且可以扩展NSObject类别进行异常接收信息

    iOS中的类、元类以及isa示例详解

    从初学OC的时候就听人提起过OC对象中的isa指针,用来指向对象所属的类,从而可以在调用方法时通过isa指针找到相应的方法和属性,下面这篇文章主要给大家介绍了关于iOS中类、元类以及isa的相关资料,需要的朋友可以...

    iOS开发中UIPopoverController的使用详解

    一、简单介绍 1.什么是UIPopoverController 是iPad开发中常见的一种控制器(在iPhone上不允许使用) 跟其他控制器不一样的是,它直接继承自NSObject,并非继承自UIViewController 它只占用部分屏幕空间来呈现信息,...

    学习 Object-C入门教程

    本书简明概要的介绍的object-c的特点。 例子具有代表性。 目录列表如下: 第 1 章,也就是本章 第 2 章,从 Hello,World!开始 第 3 章,类的声明和定义 第 4 章,继承 第 5 章,Class 类型,选择器 Selector 以及...

    Day-X:Day-X是一个简单的日记iOS应用程序,我们使用它来演示我们在课堂上介绍的许多概念

    Day-X是一个简单的日记iOS应用程序,我们用它来演示我们在课堂上介绍的许多概念。 第6课-故事板,列表视图,详细信息视图 在本节中,我们将添加一个ListViewController ,该列表将显示我们的日记帐分录列表。 我们将...

    ObjcAssociatedObjectHelpers:使与关联对象的工作变得更加愉快

    介绍 在OS X 10.6和iOS 4.0中引入了。 此功能为类实例提供了各种字典,可以使用运行时函数objc_setAssociatedObject()和objc_getAssociatedObject()在其中存储任意对象。 该项目旨在以轻巧且经过全面测试的方式使...

    Objective-C的内省(Introspection)用法小结

    内省(Introspection)是面向对象语言和环境的一个强大特性,Objective-C和Cocoa在这个方面的表现尤其的优秀。...下面的部分举例介绍如何在代码中有效地使用NSObject的内省方法。   1、isKindOfClass:Clas

    iOS中自动实现对象序列化的方法详解

    本文主要介绍 利用 runtime遍历属性 大大简化代码量,下面来看看详细的介绍吧。 具体实现代码如下: 1.先建立NSobject的分类, 定义可能用到的相关类型 static NSString *intType = @i; // int_32t(枚举int型) ...

    Objective-C对象

    作为C语言的超集,面向对象成为Objective-C与C语言...在Objective-C中,我们用到的几乎所有类都是NSObject类的子类,NSObject类定义格式如下(忽略其方法声明):这个Class为何物?在objc.h中我们发现其仅仅是一个结构

    Cocoa框架ForiOS(一)框架的介绍

    Cocoa程序可以这么说,它是由一些对象组成,而这些对象的类最后都是继承于它们的根类:NSObject。而且它们都是基于Objective-C运行环境的。iOS中,Cocoa众多框架中最重要最基本的两个框架是:Foundation和UIKit。...

    AHKBuilder:基于构建器模式的不可变对象的初始化

    博客文章中介绍了实现方法: : 用法 假设您有一个简单的Reminder类: @interface Reminder : NSObject @property ( nonatomic , copy , readonly ) NSString *title; @property ( nonatomic , strong , ...

    Objective-C中关于实例所占内存的大小详解

    续上一篇文章的介绍,这篇文章就诞生可。建议先看Objective-C 中类的数据结构,因这两部分的内容是不能断的,建议先去看看。 接下来的主题是 Objective-C 中实例所占内存的大小。 以下都是以 64bit 上分析的。 一、...

    YYKline:iOS YYKline:Kline,Chart,Volume,Scroll,Scale,MACD,KDJ,K线图,分时图..

    YYKline介绍支持MA,EMA,BOLL,KDJ,MACD,RSI,WR等技术指标,支持更多指标扩展支持运行于iOS,MacOS上 OC开发,如需Swift可直接翻译图表示例普通K线+ MACD分时图+ MACD普通K线+ KDJ分时图更多指标综合演示集成...

    InterposeKit:一个现代库,可在Swift中优雅地显示

    InterposeKit是一个现代库,可以在Swift中优雅地显示,支持类和单个对象上的钩子。 它以“纯” Swift 5.2编写有,和编写,可用于@... 比较:用法假设您要修改TestClass sayHi : class TestClass : NSObject { // Fun

    Objective-C对象模型及应用

    本文主要介绍Objective-C对象模型的实现细节,以及Objective-C语言对象模型中对isaswizzling和methodswizzling的支持。希望本文能加深你对Objective-C对象的理解。Objective-C是一门面向对象的编程语言。每一个对象...

Global site tag (gtag.js) - Google Analytics