iOS UIKit框架学习—NSObject

Objective-C中有两个NSObject,一个是NSObject类,另一个是NSObject协议。而其中NSObject类采用了NSObject协议。本文整理一下NSObject类的API

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
@protocol NSObject
// 比较两个对象的地址是否相等
- (BOOL)isEqual:(id)object;
// 如果isEqual判断两个对象相等,那么两个对象的hash返回值也一定相等。反之hsah值相等,isEqual未必认为两者一样
@property (readonly) NSUInteger hash;
// 父类类对象
@property (readonly) Class superclass;
// 本类类对象
- (Class)class OBJC_SWIFT_UNAVAILABLE("use 'anObject.dynamicType' instead");
// 对象本身
- (instancetype)self;
// 调用Selector方法(带参数和不带参数)
- (id)performSelector:(SEL)aSelector;
- (id)performSelector:(SEL)aSelector withObject:(id)object;
- (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2;
// 判断一个实例是否继承自NSObject,如果返回NO就是继承自NSObject,反之返回YES
- (BOOL)isProxy;
// 判断对象是否属于aClass及其子类
- (BOOL)isKindOfClass:(Class)aClass;
// 判断对象是否属于aClass类
- (BOOL)isMemberOfClass:(Class)aClass;
// 判断对象是否遵守了aProtocol协议
- (BOOL)conformsToProtocol:(Protocol *)aProtocol;
// 判断对象是否能响应aSelector方法
- (BOOL)respondsToSelector:(SEL)aSelector;
// 保留内存 内存引用个数加1
- (instancetype)retain OBJC_ARC_UNAVAILABLE;
// 释放内存 内存引用个数减1
- (oneway void)release OBJC_ARC_UNAVAILABLE;
// 自动释放内存
- (instancetype)autorelease OBJC_ARC_UNAVAILABLE;
// 保留的内存计数个数
- (NSUInteger)retainCount OBJC_ARC_UNAVAILABLE;
// 分配存储空间
- (struct _NSZone *)zone OBJC_ARC_UNAVAILABLE;
// 对象的内容的字符串
@property (readonly, copy) NSString *description;
// debug下对象的内容的字符串
@property (readonly, copy) NSString *debugDescription;
@interface NSObject
// 类的头文件被引入就会调用
+ (void)load;
// 类或其子类的第一个方法被调用之前调用
+ (void)initialize;
// 初始化
- (instancetype)init;
// 初始化并创建一个对象
+ (instancetype)new OBJC_SWIFT_UNAVAILABLE("use object initializers instead");
// alloc方法内部调用该方法,返回分配的存储空间zone
+ (instancetype)allocWithZone:(struct _NSZone *)zone OBJC_SWIFT_UNAVAILABLE("use object initializers instead");
// 分配存储空间
+ (instancetype)alloc OBJC_SWIFT_UNAVAILABLE("use object initializers instead");
// 对象销毁时执行
- (void)dealloc OBJC_SWIFT_UNAVAILABLE("use 'deinit' to define a de-initializer");
// 内存回收
- (void)finalize OBJC_DEPRECATED("Objective-C garbage collection is no longer supported");
// 拷贝对象方法 (不可变操作)
- (id)copy;
// 深拷贝对象方法 (可变操作)
- (id)mutableCopy;
// 拷贝类方法
+ (id)copyWithZone:(struct _NSZone *)zone OBJC_ARC_UNAVAILABLE;
// 深拷贝类方法
+ (id)mutableCopyWithZone:(struct _NSZone *)zone OBJC_ARC_UNAVAILABLE;
// 判断类是否能响应aSelector方法
+ (BOOL)instancesRespondToSelector:(SEL)aSelector;
// 判断类是否遵守protocol协议
+ (BOOL)conformsToProtocol:(Protocol *)protocol;
// 根据一个SEL,得到该方法的IMP(函数指针)
- (IMP)methodForSelector:(SEL)aSelector;
// 根据一个SEL,返回类方法的IMP(函数指针)
+ (IMP)instanceMethodForSelector:(SEL)aSelector;
// 处理接收者无法识别的消息
- (void)doesNotRecognizeSelector:(SEL)aSelector;
// 当某个对象不能接受某个selector时,将对该selector的调用转发给另一个对象
- (id)forwardingTargetForSelector:(SEL)aSelector OBJC_AVAILABLE(10.5, 2.0, 9.0, 1.0);
// 重定向消息
- (void)forwardInvocation:(NSInvocation *)anInvocation OBJC_SWIFT_UNAVAILABLE("");
// 获取方法签名的信息 和forwardInvocation:方法配合使用
- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector OBJC_SWIFT_UNAVAILABLE("");
// 获取实例方法签名的信息
+ (NSMethodSignature *)instanceMethodSignatureForSelector:(SEL)aSelector OBJC_SWIFT_UNAVAILABLE("");
// 是否允许弱引用
- (BOOL)allowsWeakReference UNAVAILABLE_ATTRIBUTE;
// 是否保留弱引用
- (BOOL)retainWeakReference UNAVAILABLE_ATTRIBUTE;
// 查看一个类是否是另一个类的子类
+ (BOOL)isSubclassOfClass:(Class)aClass;
// 动态解析一个类方法
+ (BOOL)resolveClassMethod:(SEL)sel OBJC_AVAILABLE(10.5, 2.0, 9.0, 1.0);
// 动态解析一个实例方法
+ (BOOL)resolveInstanceMethod:(SEL)sel OBJC_AVAILABLE(10.5, 2.0, 9.0, 1.0);
// 返回类的hash值
+ (NSUInteger)hash;
// 获取接收者的父类
+ (Class)superclass;
// 返回类对象
+ (Class)class OBJC_SWIFT_UNAVAILABLE("use 'aClass.self' instead");
// 类的内容的字符串
+ (NSString *)description;
// debug类的内容的字符串
+ (NSString *)debugDescription;