概述:

NSObject协议组对所有的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方法和函数指针形式的方法实现。

本文转自 科学家 新浪博客  http://blog.sina.com.cn/s/blog_62ba0fdd0100ve9b.html

转载:NSobject官方介绍的更多相关文章

  1. Cassandra官方介绍及安装

    Cassandra官方介绍及安装 这个数据库有很高的伸缩性和可用性,你完全不需要向性能妥协.在硬件或者云设施上做修改 官网:Cassandra官网 一.简介 cassandra这个数据库有很高的伸缩性 ...

  2. ESP8266乐鑫版本的(支持云端升级 (Boot 模式)烧写方法,(V1.5.4官方介绍如下)(BOOT模式)

    硬件平台: nodeMCU devkit核心板,带ch340g,应该是仿造的,官方是cp2102驱动,安信可科技有连接https://wiki.ai-thinker.com/esp8266/board ...

  3. GitHub官方介绍(中文翻译)

    注:本人亲自翻译,转载请注明出处. 官方链接地址 http://guides.github.com/activities/hello-world/ Hello World 项目在计算机编程界是一项历史 ...

  4. 转载:官方Caffe-windows 配置与示例运行

    转载来自:http://blog.csdn.net/guoyk1990/article/details/52909864 本文主要介绍官方给出的caffe-windows的配置及如何训练mnist数据 ...

  5. [转载] Redis系统性介绍

    转载自http://blog.nosqlfan.com/html/3139.html?ref=rediszt 虽然Redis已经很火了,相信还是有很多同学对Redis只是有所听闻或者了解并不全面,下面 ...

  6. [转载] 十五分钟介绍 Redis数据结构

    转载自http://blog.nosqlfan.com/html/3202.html?ref=rediszt Redis是一种面向“键/值”对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存 ...

  7. 【转载】Spring介绍之二

    Spring框架,是进行对象管理,对象关联,解耦的一个中间层框架.SSH(Struts+Spring+Hibernate)三大Spring在中间就起着一个承上启下的作用.好,首先我们先来看一下Spri ...

  8. 转载:AWR介绍使用

    转载自 http://www.cnblogs.com/lanzi/archive/2011/03/07/1975096.html 自动工作负载库(Automatic Workload Reposito ...

  9. 转载:Nginx 相关介绍

    转载自:https://www.cnblogs.com/wcwnina/p/8728391.html Nginx 相关介绍(Nginx是什么?能干嘛?)   Nginx的产生 没有听过Nginx?那么 ...

随机推荐

  1. GetProcessIdOfThread在WinXP及之前操作系统的替代实现

    还是学习VLD2.X版本看到的: 在Windows XP及之前的操作系统没有提供GetProcessIdOfThread的API,这里给出了一个替代的实现方式: 头文件: #if _WIN32_WIN ...

  2. 存储过程与SQL的结合使用

    --1调用存储过程exec 存储过程名 参数 openrowset方法使用: select * from openrowset('sqlncli', 'server=192.168.247.64;ui ...

  3. Smarty3配置

    下载Smarty压缩包并解压,复制其中的libs文件夹到我们的PHP工程目录下(可将其改名为smarty).同时,在工程目录下新建三个文件夹,分别取名为templates.templates_c和sm ...

  4. make file 详

    一: linux的touch命令不常用,一般在使用make的时候可能会用到,用来修改文件时间戳,或者新建一个不存在的文件. 1.命令格式: touch [选项]... 文件... 2.命令参数: -a ...

  5. Amazon MWS 上传数据 (三) 提交请求

    前面介绍了设置服务和构造请求,现在介绍提交请求. 上传数据,查询上传操作的工作状态,和处理上传操作返回的报告操作使用的Amazon API 分别为:SubmitFeed(),FeedSubmissio ...

  6. MFC 双缓冲加载背景

    首先定义DCmemDc和Bitmap CDC DCmemDc: CBitmap memBitmap; CBitmap *oldBitmap; 然后创建一个适应当前内存的DCmemDc CDC * dc ...

  7. ECO

    ECO(生态环保的简写) 在与环保相关的概念和资料中,ECO 是ECOLOGICAL的缩写,用来表示生态环保的意思.与之相关产生了一些新的名词,尤其是在房地产楼书中常常被提及,如: ECO-HOME, ...

  8. 行变列 拼接字符串 MSSQL 一个超级搞的问题

    由数据 ThreeLevelSortID KeyWordID KeyWordName key1 key2 key3 key4 得到数据大 ThreeLevelSortID KeyWordName ke ...

  9. getline(cin,s) bug workaround

    #include<iostream>using namespace std;#include<string> int main(){int n;stirng s;cin> ...

  10. SQL Server:SQL Like 通配符特殊用法:Escape 【转】

    SQL中escape的主要用途 1.使用   ESCAPE   关键字定义转义符.在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符.例如,要搜索在任意位置包含字符串   5%   的字符串 ...