NSObject
Posted CH520 -- Cnblogs。
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NSObject相关的知识,希望对你有一定的参考价值。
1、@protocol NSObject
-
1.1 功能说明
- @protocol NSObject 是 Objective-C 中的一个协议(protocol),它定义了一个对象应该实现的基本方法。
- 这个协议中定义的方法是最基本的方法,包括对象的初始化、内存管理、类信息等基础功能。
- 所有的 Objective-C 对象都会默认实现这个协议,因此任何一个 NSObject 子类都会有这些方法的默认实现,而在这个基础上子类可以增加自己的方法和属性。
- 在 Objective-C 中,协议是一种重要的特性,可以让对象在保持独立性的同时,也能够与其他对象进行交互和通信。
-
1.2 属性、方法说明
/** 对象的父类类型 */
@property (readonly) Class superclass;
/** 对象的描述信息 */
@property (readonly, copy) NSString *description;
/** 对象的调试描述信息 */
@property (readonly, copy) NSString *debugDescription;
/**
* @brief 返回对象的类型
*
* @return Class类型,对象的类型
*/
- (Class)class OBJC_SWIFT_UNAVAILABLE("use \'type(of: anObject)\' instead");
/**
* @brief 返回当前对象
*
* @return 当前对象
*/
- (instancetype)self;
/** 对象的哈希值 */
@property (readonly) NSUInteger hash;
/**
* @brief 判断两个对象是否相等
*
* @param object 要比较的另一个对象
*
* @return BOOL类型,如果两个对象相等则为YES,反之则为NO
*/
- (BOOL)isEqual:(id)object;
/**
* @brief 执行指定的方法
*
* @param aSelector 要执行方法的选择器
*
* @return 方法执行后的返回值
*/
- (id)performSelector:(SEL)aSelector;
/**
* @brief 执行带一个参数的指定的方法
*
* @param aSelector 要执行方法的选择器
* @param object 方法参数
*
* @return 方法执行后的返回值
*/
- (id)performSelector:(SEL)aSelector withObject:(id)object;
/**
* @brief 执行带两个参数的指定的方法
*
* @param aSelector 要执行方法的选择器
* @param object1 方法第一个参数
* @param object2 方法第二个参数
*
* @return 方法执行后的返回值
*/
- (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2;
/**
* @brief 判断对象是否是一个代理对象
*
* @return BOOL类型,如果是代理对象则为YES,反之则为NO
*/
- (BOOL)isProxy;
/**
* @brief 判断对象是否是指定类或其子类的实例
*
* @param aClass 要比较的类
*
* @return BOOL类型,如果对象是指定类或其子类的实例则为YES,反之则为NO
*/
- (BOOL)isKindOfClass:(Class)aClass;
/**
* @brief 判断对象是否是指定类的实例
*
* @param aClass 要比较的类
*
* @return BOOL类型,如果对象是指定类的实例则为YES,反之则为NO
*/
- (BOOL)isMemberOfClass:(Class)aClass;
/**
* @brief 判断对象是否遵循了指定协议
*
* @param aProtocol 要比较的协议
*
* @return BOOL类型,如果对象遵循了指定协议则为YES,反之则为NO
*/
- (BOOL)conformsToProtocol:(Protocol *)aProtocol;
/**
* @brief 判断对象是否实现了指定的方法
*
* @param aSelector 要判断的方法的选择器
*
* @return BOOL类型,如果对象实现了指定的方法则为YES,反之则为NO
*/
- (BOOL)respondsToSelector:(SEL)aSelector;
/**
* @brief 返回对象的当前的引用计数
*
* @return NSUInteger类型,对象的当前的引用计数
*/
- (NSUInteger)retainCount OBJC_ARC_UNAVAILABLE;
/**
* @brief 引用计数加1,ARC模式下不可用
*
* @return 当前对象
*/
- (instancetype)retain OBJC_ARC_UNAVAILABLE;
/**
* @brief 引用计数减1,ARC模式下不可用
*/
- (oneway void)release OBJC_ARC_UNAVAILABLE;
/**
* @brief 对象被标记为不需要在动态内存管理的下释放,ARC模式下不可用
*
* @return 当前对象
*/
- (instancetype)autorelease OBJC_ARC_UNAVAILABLE;
/**
* @brief 返回指向对象所在的内存区域的指针,ARC模式下不可用
*
* @return 指向对象所在的内存区域的指针
*/
- (struct _NSZone *)zone OBJC_ARC_UNAVAILABLE;
2、@interface NSObject
-
2.1 功能说明
- 这是一个 Objective-C 的关键字,表示定义了一个类,且该类继承了 NSObject。
- NSObject 是一个 Objective-C 面向对象编程中的基类,定义了一些基本的方法和属性,如内存管理、对象的初始化等。
- 同时,指定
表示该类遵循 NSObject 协议,以确保实现了一些必要的方法来符合 Objective-C 中的内存管理模式。
-
2.2 属性、方法说明
/**
* @brief 在应用程序第一次加载类时调用,只会调用一次
*/
+ (void)load;
/**
* @brief 在类或其子类的第一个方法调用之前调用,并且只会调用一次
*/
+ (void)initialize;
/**
* @brief 初始化方法,返回一个新分配的类实例
*
* @discussion 一般情况下不应该直接调用init方法,而是使用类提供的便利构造方法来初始化对象
*/
- (instancetype)init;
/**
* @brief 分配并返回一个类的新实例,但没有初始化该实例
*
* @return 返回一个新实例
*/
+ (instancetype)new OBJC_SWIFT_UNAVAILABLE("use object initializers instead");
/**
* @brief 分配并返回一个类的新实例,但没有初始化该实例
*
* @param zone 分配内存所在的区域
* @return 返回一个新实例
*/
+ (instancetype)allocWithZone:(struct _NSZone *)zone OBJC_SWIFT_UNAVAILABLE("use object initializers instead");
/**
* @brief 分配并返回一个类的新实例,但没有初始化该实例
*
* @return 返回一个新实例
*/
+ (instancetype)alloc OBJC_SWIFT_UNAVAILABLE("use object initializers instead");
/**
* @brief 析构方法
*/
- (void)dealloc OBJC_SWIFT_UNAVAILABLE("use \'deinit\' to define a de-initializer");
/**
* @brief 返回一个对象的浅副本
*
* @return 返回一个浅副本
*/
- (id)copy;
/**
* @brief 返回一个对象的深副本
*
* @return 返回一个深副本
*/
- (id)mutableCopy;
/**
* @brief 根据给定的内存区域复制一个对象
*
* @param zone 分配内存所在的区域
* @return 返回一个分配好后的对象
*/
+ (id)copyWithZone:(struct _NSZone *)zone OBJC_ARC_UNAVAILABLE;
/**
* @brief 根据给定的内存区域复制一个对象
*
* @param zone 分配内存所在的区域
* @return 返回一个分配好后的对象
*/
+ (id)mutableCopyWithZone:(struct _NSZone *)zone OBJC_ARC_UNAVAILABLE;
/**
* @brief 判断该类是否有实现指定的方法
*
* @param aSelector 要判断的方法的选择器
* @return 有返回YES,没有返回NO
*/
+ (BOOL)instancesRespondToSelector:(SEL)aSelector;
/**
* @brief 判断该类是否符合指定协议
*
* @param protocol 要判断的协议
* @return 符合返回YES,不符合返回NO
*/
+ (BOOL)conformsToProtocol:(Protocol *)protocol;
/**
* @brief 返回类实现指定方法的函数指针
*
* @param aSelector 要获取的方法的选择器
* @return 类实现指定方法的函数指针
*/
- (IMP)methodForSelector:(SEL)aSelector;
/**
* @brief 返回类或其父类的实现指定方法的函数指针
*
* @param aSelector 要获取的方法的选择器
* @return 类或其父类实现指定方法的函数指针
*/
+ (IMP)instanceMethodForSelector:(SEL)aSelector;
/**
* @brief 如果对象无法响应传入的消息,则调用此方法
*
* @param aSelector 无法响应的消息的选择器
*/
- (void)doesNotRecognizeSelector:(SEL)aSelector;
/**
* @brief 返回一个对象,该对象将接收并处理无法响应的消息
*
* @param aSelector 无法响应的消息的选择器
* @return 返回一个对象,该对象将接收并处理无法响应的消息
*/
- (id)forwardingTargetForSelector:(SEL)aSelector OBJC_AVAILABLE(10.5, 2.0, 9.0, 1.0, 2.0);
/**
* @brief 将无法识别的消息转发到另一个接收器进行处理
*
* @param anInvocation 无法识别的消息
*/
- (void)forwardInvocation:(NSInvocation *)anInvocation OBJC_SWIFT_UNAVAILABLE("");
/**
* @brief 返回一个方法的方法签名
*
* @param aSelector 需要获取方法签名的方法
* @return 返回方法签名
*/
- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector OBJC_SWIFT_UNAVAILABLE("");
/**
* @brief 返回一个方法的方法签名
*
* @param aSelector 需要获取方法签名的方法
* @return 返回方法签名
*/
+ (NSMethodSignature *)instanceMethodSignatureForSelector:(SEL)aSelector OBJC_SWIFT_UNAVAILABLE("");
/**
* @brief 允许该对象被弱参考,但是已被弃用
*
* @return 返回YES或NO
*/
- (BOOL)allowsWeakReference UNAVAILABLE_ATTRIBUTE;
/**
* @brief 声明该对象不支持被弱参考,但是已被弃用
*
* @return 返回YES或NO
*/
- (BOOL)retainWeakReference UNAVAILABLE_ATTRIBUTE;
/**
* @brief 判断该类是否为另一个类的子类
*
* @param aClass 要判断的类
* @return 如果是返回YES,不是返回NO
*/
+ (BOOL)isSubclassOfClass:(Class)aClass;
/**
* @brief 动态添加一个类方法
*
* @param sel 要添加的类方法的选择器
* @return 如果添加成功返回YES,否则返回NO
*/
+ (BOOL)resolveClassMethod:(SEL)sel OBJC_AVAILABLE(10.5, 2.0, 9.0, 1.0, 2.0);
/**
* @brief 动态添加一个实例方法
*
* @param sel 要添加的实例方法的选择器
* @return 如果添加成功返回YES,否则返回NO
*/
+ (BOOL)resolveInstanceMethod:(SEL)sel OBJC_AVAILABLE(10.5, 2.0, 9.0, 1.0, 2.0);
/**
* @brief 返回一个整数值,该值用于标识类的实例
*
* @return 返回一个整数值,该值用于标识类的实例
*/
+ (NSUInteger)hash;
/**
* @brief 返回这个类的超类,如果该类没有超类,则返回nil
*
* @return 返回这个类的超类,如果该类没有超类,则返回nil
*/
+ (Class)superclass;
/**
* @brief 返回对象的类
*
* @return 返回对象的类
*/
+ (Class)class OBJC_SWIFT_UNAVAILABLE("use \'aClass.self\' instead");
/**
* @brief 返回一个字符串,该字符串描述了对象实例
*
* @return 返回一个字符串,该字符串描述了对象实例
*/
+ (NSString *)description;
/**
* @brief 返回一个字符串,该字符串描述了对象实例信息的详细信息
*
* @return 返回一个字符串,该字符串描述了对象实例信息的详细信息
*/
+ (NSString *)debugDescription;
以上是关于NSObject的主要内容,如果未能解决你的问题,请参考以下文章
id, NSObject *, id<NSObject>区别
NSObject头文件解析 / 消息机制 / Runtime解读