协议就是一组接口的集合,遵守一个协议之后就拥有的该协议中所有方法的声明。NSObject这个类遵守了NSObject协议,并且实现了NSObject协议里的所有方法,所以NSObject类及其子类都可以调用这些方法。本文主要介绍NSObject协议里的方法。

(1)

- (BOOL)isEqual:(id)object;

  "=="判断是否是同一个对象,比较的是内存地址。"isEqual"判断两个对像是否相同,比较的是成员变量的值是否相同。

@interface Person : NSObject

@property (nonatomic, strong) NSString *father;
@property (nonatomic, assign) NSUInteger age; @end @implementation Person @end
@interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; Person *xiaoming = [Person new];
xiaoming.father = @"laowang";
xiaoming.age = 12; Person *xiaohong = [Person new];
xiaohong.father = @"laowang";
xiaohong.age = 12; NSLog(@"xiaoming == xiaohong = %d",xiaoming == xiaohong);
NSLog(@"xiaohong isEqual:xiaohong = %d",[xiaohong isEqual:xiaohong]);
}
2017-05-06 09:26:51.799 OCTest[2401:832010] xiaoming == xiaohong = 0
2017-05-06 09:26:51.799 OCTest[2401:832010] xiaohong isEqual:xiaohong = 1

(2)

@property (readonly) NSUInteger hash;

  Hash Table的key,用于set和dictionary,默认是对象在内存中的地址,保证了唯一性。

- (void)viewDidLoad {

    [super viewDidLoad];

    NSLog(@"self = %ld",self);
NSLog(@"self.hash = %u",self.hash);
}
2017-05-06 09:32:01.116 OCTest[2408:832939] self = 384375648
2017-05-06 09:32:01.117 OCTest[2408:832939] self.hash = 384375648

(3)

@property (readonly) Class superclass;

  对象的父类, NSObject实例的superclass为NULL。

(4)

- (Class)class;

  获得对象的类。‘+(Class)class;’获得的是类对象的元类;

(5)

- (instancetype)self;

  获得对象自己。

(6)

- (id)performSelector:(SEL)aSelector;
- (id)performSelector:(SEL)aSelector withObject:(id)object;
- (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2;

  是对象调用某个方法,object是参数,最多有两个。

(7)

- (BOOL)isProxy;

  是否是NSProxy的实例;NSObject是大多数类的基类,例外一部分就是NSProxy的实例了。NSProxy是一个非常神奇的类,可以用来模仿多继承,因为他可以转发消息,指定一个实例执行消息。

(8)

- (BOOL)isKindOfClass:(Class)aClass;

  判断某个对象是否是某个类或者子类的实例。

(9)

- (BOOL)isMemberOfClass:(Class)aClass;

  判断某个对象是否是某个类的实例.

(10)

- (BOOL)conformsToProtocol:(Protocol *)aProtocol;

  判断某个实例是否遵守协议,是否实现了协议里的方法不一定。这个方法只能判断是否声明了协议了里的方法,是否实现得用"respondsToSelector"判断。

(11)

- (BOOL)respondsToSelector:(SEL)aSelector;

  是否响应了某个方法。代理传值之前,必须判断是否是响应了协议里的方法,否则会崩溃。

  除了NSObject协议,其他所有的协议都必须得遵守NSObject协议。这是为什么呢?如果不遵守会怎样?我可以明确的告诉你,会崩溃,会报"unrecognized selector sent to instance 0x15d78700"错误。因为代理调用了NSObject协议里的方法。声明代理的时候是id类型的,不确定是NSObject的实例,所以不能调用NSObject协议里的方法。

@protocol PersonDelegate <NSObject>
@end

(12)

- (instancetype)retain;
- (oneway void)release;
- (instancetype)autorelease;
- (NSUInteger)retainCount;
- (struct _NSZone *)zone ;

  现在都是ARC了,还调用MRC才能使用的方法,真是太落伍了。

(13)

@property (readonly, copy) NSString *description;
@optional
@property (readonly, copy) NSString *debugDescription;

  description是代码打印输出实例的时候调用的方法,debugDescription是控制台也就是po的时候输出实例的时候调用的方法,都可以自定义。其实NSObject协议里的方法都可以根据自己的需求自定义。

iOS 详解NSObject协议的更多相关文章

  1. IOS详解TableView——选项抽屉(天猫商品列表)

    在之前的有篇文章讲述了利用HeaderView来写类似QQ好友列表的表视图. 这里写的天猫抽屉其实也可以用该方法实现,具体到细节每个人也有所不同.这里采用的是点击cell对cell进行运动处理以展开“ ...

  2. http协议报头详解HTTP协议结构

    http协议 请求报文和响应报文都是由以下4部分组成 1.请求行 2.请求头 3.空行 4.消息主体 下图为http请求的报文结构 下图为http响应报文结构 请求行 格式为: Method Requ ...

  3. IOS开发之NSObject协议类方法说明

    oc中NSObject类是所有类的基类,所有类都要继承自它,那么它的方法就显得特别重要,因为所有类都会有这些基本的方法. 看看oc的源码中NSObject是这样定义的: @interface NSOb ...

  4. iOS:详解MJRefresh刷新加载更多数据的第三方库

    原文链接:http://www.ios122.com/2015/08/mjrefresh/ 简介 MJRefresh这个第三方库是李明杰老师的杰作,这个框架帮助我们程序员减轻了超级多的麻烦,节约了开发 ...

  5. iOS 详解NSXMLParser方法解析XML数据方法

    前一篇文章已经介绍了如何通过URL从网络上获取xml数据.下面介绍如何将获取到的数据进行解析. 下面先看看xml的数据格式吧! <?xml version="1.0" enc ...

  6. 一:详解 HTTP 协议

    本篇文章篇幅比较长,先来个思维导图预览一下. 一张图带你看完本篇文章 一.概述 1.计算机网络体系结构分层 计算机网络体系结构分层 2.TCP/IP 通信传输流 利用 TCP/IP 协议族进行网络通信 ...

  7. HTTP协议简介详解 HTTP协议发展 原理 请求方法 响应状态码 请求头 请求首部 java模拟浏览器客户端服务端

    协议简介 协议,自然语言里面就是契约,也是双方或者多方经过协商达成的一致意见; 契约也即类似于合同,自然有甲方123...,乙方123...,哪些能做,哪些不能做; 通信协议,也即是双方通过网络通信必 ...

  8. 详解HTTP协议

    一 什么是HTTP协议 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网服务器传输超文本到本地浏览器的传送协议.HTTP 是基于 TCP/ ...

  9. rtp协议详解/rtcp协议详解

    转自:http://www.cnblogs.com/li0803/archive/2010/11/20/1882792.html 1.简介 目前,在IP网络中实现实时语音.视频通信和应用已经成为网络应 ...

随机推荐

  1. shiro权限控制

    1.1  简介 Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Securi ...

  2. 获取 metadata 的完整例子 - 每天5分钟玩转 OpenStack(166)

    我们将通过实验详细分析 instance 从 nova-api-metadata 获取信息的完整过程. 环境介绍 1. 一个 all-in-one 环境(多节点类似). 2. 已创建 neutron ...

  3. 【树莓派】Linux 测网速及树莓派源

    这篇文章比较杂,其中包含三点:linux环境中测试网络速度,树莓派下载软件的源,部分我写好的脚本: 一.Linux 测网速 Linux 测网速: sar -n DEV 1 100 1代表一秒统计并显示 ...

  4. 用js控制css属性

    在用js控制css属性时,行内css属性可以任意控制,但若是在<style></style>中写的css属性,均不能用alert读取,但是赋值却有几种现象, 第一种:无法读取, ...

  5. 手动编写JQUERY插件

    就拿一个简单的示例来说,鼠标点击输入框,提示文字消息,鼠标移开,再显示提示文字. <script type="text/javascript"> //编写插件 (fun ...

  6. media query(媒体查询)和media type(媒体类型)

    media type(媒体类型)是css 2中的一个非常有用的属性,通过media type我们可以对不同的设备指定特定的样式,从而实现更丰富的界面.media query(媒体查询)是对media ...

  7. 查看apache,mysql,nginx,php的编译参数

    查看nginx编译参数:/usr/local/nginx/sbin/nginx -V 查看apache编译参数:cat /usr/local/apache2/build/config.nice 查看m ...

  8. 自适应的tab菜单栏

    代码部分: Css代码:*{ margin:0px; padding:0px; font-size:62.5%;}body{ background-color:#FFFFFF;}.zw-test-ti ...

  9. JavaScript对象的深浅复制

    前言 从层次上来看,对象的复制可以简单地分为浅复制和深复制,顾名思义,浅复制是指只复制一层对象的属性,不会复制对象中的对象的属性,对象的深复制会复制对象中层层嵌套的对象的属性. 在复制对象时,除了要复 ...

  10. 如何在IDEA中调试 Jar文件

    原创文章,转载请注明出处:http://www.cnblogs.com/acm-bingzi/p/6668333.html   问题: 一般情况下,可以打成Jar包的项目,它的源码运行Applicat ...