NSObject类的API介绍
这篇文章围绕的对象就是NSObject.h文件,对声明文件中的属性、方法进行必要的“翻译”。
该文件大致由两部分组成:NSObject协议和NSObject类。
(一)NSObject协议
- (BOOL)isEqual:(id)object;
//这个方法的作用是判断两个对象是否相等。
//两个对象是否相等不能简单地用“==”判断。基本数据类型用“==”可以判断,如果用在对象身上,只能判断这两个对象的地址是否相等。
//对象是否相等的判断是比较复杂的,具体的类判断的方式还不一样。但是这个方法的重要性又很高。因此必要情况下,具体的类都有类似的“判断两个对象是否相等”的方法。比如:
NSNumber的- (BOOL)isEqualToNumer:(NSNumber *)number;方法
NSValue的- (BOOL)isEqualToValue:(NSValue *)value;方法
NSString的- (BOOL)isEqualToString:(NSString *)aString;方法
NSArray的- (BOOL)isEqualToArray:(NSArray<ObjectType> *)otherArray;方法
等等等等
-----------------------------------------------------------
@property (readonly) NSUInteger hash;
//获取对象的哈希值。
-----------------------------------------------------------
@property (readonly) Class superclass;
//获取实例对象的父类。
-----------------------------------------------------------
- (Class)class
//获取实例对象的类。
-----------------------------------------------------------
- (instancetype)self;
//获取实例对象自身。
-----------------------------------------------------------
- (id)performSelector:(SEL)aSelector;
- (id)performSelector:(SEL)aSelector withObject:(id)object;
- (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2;
//这几个方法是OC中一种方法调用方式。使用这些方法可以向一个实例对象传递任何消息,而不需要在编译的时候声明这些方法。所以这也是runtime的一种应用方式。
//可以参考“消息处理之performSelector”进一步了解
-----------------------------------------------------------
- (BOOL)isProxy;
//判断该实例对象的类是否继承自NSObject类。返回NO则说明继承自NSObject,返回YES则说明不继承NSObject类。
-----------------------------------------------------------
- (BOOL)isKindOfClass:(Class)aClass;
- (BOOL)isMemberOfClass:(Class)aClass;
//判断该实例对象是否是aClass类的实例对象。这两个有区别
//直接用下面的例子说明,继承关系是:Man继承于Person继承于NSObject


-----------------------------------------------------------
- (BOOL)conformsToProtocol:(Protocol *)aProtocol;
//判断该实例对象的类是否实现了指定协议aProtocol中的方法。
-----------------------------------------------------------
- (BOOL)respondsToSelector:(SEL)aSelector;
//判断该实例对象的类是否实现了指定方法aSelector。
-----------------------------------------------------------
- (instancetype)retain OBJC_ARC_UNAVAILABLE;
- (oneway void)release OBJC_ARC_UNAVAILABLE;
- (instancetype)autorelease OBJC_ARC_UNAVAILABLE;
- (NSUInteger)retainCount OBJC_ARC_UNAVAILABLE; - (struct _NSZone *)zone OBJC_ARC_UNAVAILABLE;
//以上的五个方法是在MRC的编译环境中使用的。
//retain:使该实例对象的引用计数加1
//release:使该实例对象的引用计数减1
//autorelease:使该实例对象的引用计数以推迟方式自动减1
//retainCount:获取该实例对象的引用计数
//zone:获取该实例对象的存储空间
-----------------------------------------------------------
@property (readonly, copy) NSString *description;
//获取该实例对象的描述信息
-----------------------------------------------------------
@optional
@property (readonly, copy) NSString *debugDescription;
//获取该实例对象在调试中的描述信息
-----------------------------------------------------------
(二)NSObject类
+ (void)load;
//运行时加载类或分类调用该方法,每个类只会调用一次
-----------------------------------------------------------
+ (void)initialize;
//类实例化使用前需要先初始化,一个类调用一次,如果子类没有实现该方法则会调用父类的此方法
-----------------------------------------------------------
- (instancetype)init;
//初始化对象
-----------------------------------------------------------
+ (instancetype)new;
//分配内存空间并初始化新对象,相当于[[NSObject alloc] init]
-----------------------------------------------------------
+ (instancetype)allocWithZone:(struct _NSZone *)zone;
//指定内存空间创建一个新对象,参数可以传nil
-----------------------------------------------------------
+ (instancetype)alloc;
//为新对象分配内存空间
-----------------------------------------------------------
- (void)dealloc;
//释放对象,当实例对象的引用计数为0时系统会自动调用此方法
-----------------------------------------------------------
- (void)finalize;
//垃圾回收器处理该实例对象所使用的内存前,系统会自动调用此方法
-----------------------------------------------------------
- (id)copy;
- (id)mutableCopy;
//有名的“浅拷贝、深拷贝”15867147703
//浅拷贝属于指针拷贝,深拷贝属于内容拷贝+指针拷贝
-----------------------------------------------------------
+ (id)copyWithZone:(struct _NSZone *)zone;
+ (id)mutableCopyWithZone:(struct _NSZone *)zone;
//上面的两个方法是在MRC编译环境中使用
//第一个方法:在指定的内存空间上复制为不可变对象
//第二个方法:在指定的内存空间上复制为可变对象
-----------------------------------------------------------
+ (BOOL)instancesRespondToSelector:(SEL)aSelector;
//判断实例对象是否能够调用给定的方法
-----------------------------------------------------------
+ (BOOL)conformsToProtocol:(Protocol *)protocol;
//判断类是否遵从给定的协议
-----------------------------------------------------------
- (IMP)methodForSelector:(SEL)aSelector;
//获取指定方法实现IMP的指针
-----------------------------------------------------------
+ (IMP)instanceMethodForSelector:(SEL)aSelector;
//获取指定实例方法实现IMP的指针
-----------------------------------------------------------
- (void)doesNotRecognizeSelector:(SEL)aSelector;
//找不到函数的实现将调用此方法抛出异常
-----------------------------------------------------------
- (id)forwardingTargetForSelector:(SEL)aSelector;
//返回消息被第一个转发的对象,对象没有找到SEL的IML时就会执行调用方法
-----------------------------------------------------------
- (void)forwardInvocation:(NSInvocation *)anInvocation;
//methodSignatureForSelector:返回不为nil则调用该方法,可以重写该方法将SEL转发给另一个对象
-----------------------------------------------------------
- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector;
//获取方法签名,对象没有找到SEL的IML时就会执行调用该方法,可以重写该方法抛出一个函数的签名,再由forwardInvocation:去执行
-----------------------------------------------------------
+ (NSMethodSignature *)instanceMethodSignatureForSelector:(SEL)aSelector;
//获取实例方法签名
-----------------------------------------------------------
- (BOOL)allowsWeakReference;
//允许弱引用标量,对于所以该方法返回NO的类绝对不能使用__weak修饰符
-----------------------------------------------------------
- (BOOL)retainWeakReference;
//保留弱引用变量,在使用__weak修饰符的变量时,当被赋值对象的该方法返回NO的情况,该变量将使用nil
-----------------------------------------------------------
+ (BOOL)isSubclassOfClass:(Class)aClass;
//判断该类是否是另一个类aClass的子类
-----------------------------------------------------------
+ (BOOL)resolveClassMethod:(SEL)sel;
//动态解析一个类方法
-----------------------------------------------------------
+ (BOOL)resolveInstanceMethod:(SEL)sel;
//动态解析一个实例方法,对象没有找到SEL的IML时就会执行调用该方法,可以重写该方法给对象添加所需的SEL
-----------------------------------------------------------
+ (NSUInteger)hash;
//获取对象的hash值
-----------------------------------------------------------
+ (Class)superclass;
//获取该类的父类
-----------------------------------------------------------
+ (Class)class;
//获取类
-----------------------------------------------------------
+ (NSString *)description;
//获取该对象的描述信息
-----------------------------------------------------------
+ (NSString *)debugDescription;
//获取对象在调试器中的描述信息
NSObject类的API介绍的更多相关文章
- java中FILE类常用API介绍
- 多线程(二)~Thread类相关的API介绍
一.线程安全问题: 当我们使用多个线程操作统一方法内的局部变量的时候,每个局部变量在当前线程里都有自己的副本,这种情况是不会出现线程安全问题的.当我们两个线程同时操作全局变量的时候,有可能 ...
- Servlet基础(一) Servlet简介 关键API介绍及结合源码讲解
Servlet基础(一) Servlet基础和关键的API介绍 Servlet简介 Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中. Servlet容器负责Servl ...
- android.hardware.Camera类及其标准接口介绍
android.hardware.Camera类及其标准接口介绍,API level 19 http://developer.android.com/reference/android/hardwar ...
- Commons-lang API介绍
4.1 Commons-lang API介绍 4.1.1 StringUtils 4.1.2 StringEscapeUtils 4.1.3 ArrayUtils 4.1.4 DateUtils 4. ...
- APP自动化框架LazyAndroid使用手册(3)--核心API介绍
作者:黄书力 概述 在前一篇博文中,简要介绍了一款安卓UI自动化测试框架LazyAndroid (http://blog.csdn.net/kaka1121/article/details/53204 ...
- ElasticSearch的API介绍
ElasticSearch的API介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.ES是基于Restful风格 1>ES是基于Restful风格 Elasticsea ...
- python 全栈开发,Day95(RESTful API介绍,基于Django实现RESTful API,DRF 序列化)
昨日内容回顾 1. rest framework serializer(序列化)的简单使用 QuerySet([ obj, obj, obj]) --> JSON格式数据 0. 安装和导入: p ...
- Spring Environment(一)API 介绍
Spring Environment(一)API 使用 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) Spring 3. ...
随机推荐
- AS常用快捷键
Alt+回车 导入包,自动修正 Ctrl+N 查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+L 格式化代码 Ctrl+Alt+O 优化导入的类和包 Alt+Insert 生成代码(如g ...
- 利用mnist训练集生成的caffemodel对mnist测试集与自己手写的数字进行测试
从一到二:利用mnist训练集生成的caffemodel对mnist测试集与自己手写的数字进行测试 通过从零到一的教程,我们已经得到了通过mnist训练集生成的caffemodel,主要包含下面四个文 ...
- 箭头函数 this指向问题
1.为什么要用箭头函数 简洁 易用 固定this 指向(箭头函数在this定义时候生效) 2.箭头函数分析this指向 1.this指向调用函数的对象 情况1 var obj={ a:"1& ...
- CDQ 分治
引言: 什么是CDQ分治?其实这是一种思想而不是具体算法,因此CDQ分治覆盖的范围相当广泛,在 OI 界初见于陈丹琦 2008 年的集训队作业中,故被称为CDQ分治. 大致分为三类: cdq分治解决与 ...
- webRTC中回声消除(AEC)模块编译时aec_rdft.c文件报错:
webRTC中回声消除(AEC)模块编译时aec_rdft.c文件报错. 原因是: 局部变量ip跟全局变量冲突的问题,可以将局部变量重新命名一下,就可以通过编译了. aec_rdft.c修改以后文件代 ...
- [C/C++] 只允许程序运行一个实例
原理是创建一个内核对象之后 如果再创建一个同名的对象 就会给代码中的GetLastError函数对应的变量修改为 ERROR_ALREADY_EXISTS (但是不影响"创建"对象 ...
- 前端框架vue学习笔记:环境搭建
兼容性 不兼容IE8以下 Vue Devtools 能够更好的对界面进行审查和调试 环境搭建 1.nodejs(新版本的集成了npm)[npm是node包管理 node package manager ...
- Python socket day1
客户端和服务端通过ip地址确认互相身份.(ip:用来在网络中标记一台电脑) 如果A,B两个人IP地址相同,接受到的信息有时候A收到,有时候B收到 当你用QQ时,双击选中头像其实就是选中了对方的IP地址 ...
- ubuntu 18.04中nginx不能访问软链接目录中的内容
解决办法:以root权限运行nginx,即修改/etc/nginx/nginx.conf中的user www-data为root
- .NET中的字符串(2):你真的了解.NET中的String吗?
概述 String在任何语言中,都有它的特殊性,在.NET中也是如此.它属于基本数据类型,也是基本数据类型中唯一的引用类型.字符串可以声明为常量,但是它却放在了堆中.希望通过本文能够使大家对.NET中 ...