这篇文章围绕的对象就是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介绍的更多相关文章

  1. java中FILE类常用API介绍

  2. 多线程(二)~Thread类相关的API介绍

      一.线程安全问题:     当我们使用多个线程操作统一方法内的局部变量的时候,每个局部变量在当前线程里都有自己的副本,这种情况是不会出现线程安全问题的.当我们两个线程同时操作全局变量的时候,有可能 ...

  3. Servlet基础(一) Servlet简介 关键API介绍及结合源码讲解

    Servlet基础(一) Servlet基础和关键的API介绍 Servlet简介 Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中. Servlet容器负责Servl ...

  4. android.hardware.Camera类及其标准接口介绍

    android.hardware.Camera类及其标准接口介绍,API level 19 http://developer.android.com/reference/android/hardwar ...

  5. 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. ...

  6. APP自动化框架LazyAndroid使用手册(3)--核心API介绍

    作者:黄书力 概述 在前一篇博文中,简要介绍了一款安卓UI自动化测试框架LazyAndroid (http://blog.csdn.net/kaka1121/article/details/53204 ...

  7. ElasticSearch的API介绍

    ElasticSearch的API介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.ES是基于Restful风格 1>ES是基于Restful风格 Elasticsea ...

  8. python 全栈开发,Day95(RESTful API介绍,基于Django实现RESTful API,DRF 序列化)

    昨日内容回顾 1. rest framework serializer(序列化)的简单使用 QuerySet([ obj, obj, obj]) --> JSON格式数据 0. 安装和导入: p ...

  9. Spring Environment(一)API 介绍

    Spring Environment(一)API 使用 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) Spring 3. ...

随机推荐

  1. 类扩展欧几里得 zquoj 26659

    求该式子,因为只有里面mod  外面没mod: 所以先是把前面的等差数列求和,然后再减去模掉的部分: 这是类欧几里得模板题 #include<bits/stdc++.h> #define ...

  2. JQuery中的DOM操作(转载)

    原文链接:http://www.cnblogs.com/ILYljhl/archive/2013/07/10/3182414.html jQuery封装了大量DOM操作的API,极大提高了操作DOM节 ...

  3. 解决MinGW运行时提示丢失libgmp-10.dll

    如何解决刚安装的MinGW提示"丢失xxx.dll" 解决方案: 1.配置环境变量,出现这种问题的主要原因是因为没配置环境变量,网上的大多数解决方案也是基于这个的. 2.安装包损坏 ...

  4. 新手学习arm的建议

    本文来自:chen4013874的博客 如果您是ARM初学者或者以前是51单片机应用开发工程师,想快速进入32位ARM嵌入式开发领域,建议您阅读本文档.本文档是我们结合多年ARM开发经验,针对初学者对 ...

  5. HDU 1237 简单计算器(栈+stringstream)

    提供几份代码,这题的输入可以用stringsteam处理,先处理乘除后处理加减,正常思路,但是后面统计加减法的时候,对栈的运用错了,我用的时候相当于给它多加了几个括号就错了. 正确的简单解法就是,加法 ...

  6. ANSYS中 *VWRITE命令使用

    目录 1. *VWRITE命令 2. Fortran字段描述符 1. *VWRITE命令 ANSYS输出结果到文件,采用*VWRITE命令,具体命令如下: *VWRITE,Par1,Par2,.... ...

  7. AppBar 自定义顶部导航按钮 图标、颜色 以及 TabBar 定义顶部 Tab 切换

    一.Flutter AppBar 自定义顶部按钮图标.颜色 leading   在标题前面显示的一个控件,在首页通常显示应用的 logo:在其他界面通常显示为返回按钮 title  标题,通常显示为当 ...

  8. FFmpeg + php 视屏转换

    什么是FFmpeg? FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件).它提供了录制.转换以及流化音视频的完整解决方案.它包含了非常先进 ...

  9. 洛谷 P1464 Function(简单记忆化)

    嗯... 让一切从水开始吧... 水过初赛,但愿复赛能够接着水过... 这道题不记忆化会tle,所以用空间换时间,将每次的答案(只有20*20*20个)存下来,如果之前已经求过,就不需要重复求了... ...

  10. 制作手风琴效果时发现新大陆,好吧,其实是一个bug

    手风琴效果代码: <!DOCTYPE html> <html>    <head>         <meta charset="utf-8&quo ...