今天博主有一个浅析NSobject API的需求,遇到了一些困难点,在此和大家分享,希望能够共同进步.
我们都知道NSObject自身遵循NSObject这个协议,从协议开始说
- (BOOL)isEqual:(id)object
@property (readonly) NSUInteger hash / + (NSUInteger)hash
@property (readonly) Class superclass / + (Class)superclass
- (Class)class / + (Class)class
- (instancetype)self
- (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2
- (BOOL)isProxy
- (BOOL)isKindOfClass:(Class)aClass
- (BOOL)isMemberOfClass:(Class)aClass
- (BOOL)conformsToProtocol:(Protocol)aProtocol
+ (BOOL)conformsToProtocol:(Protocol *)protocol
- (BOOL)respondsToSelector:(SEL)aSelector
+ (BOOL)instancesRespondToSelector:(SEL)aSelector
@property (readonly, copy) NSString description
+ (NSString *)description
@property (readonly, copy) NSString *debugDescription
+ (NSString )debugDescription
+ (void)load
+ (void)initialize
- (instancetype)init
+ (instancetype)new
+ (instancetype)allocWithZone:(struct _NSZone *)zone
+ (instancetype)alloc
- (void)dealloc
- (void)finalize
- (id)copy
- (id)mutableCopy
- (IMP)methodForSelector:(SEL)aSelector
+ (IMP)instanceMethodForSelector:(SEL)aSelector
- (void)doesNotRecognizeSelector:(SEL)aSelector
- (void)show
{
// Subclasses need to override this method...
[self doesNotRecognizeSelector:_cmd];
}
那么继承A的子类,想要实现show方法,必须重写,直接调用的话crash。- (BOOL)allowsWeakReference
- (BOOL)retainWeakReference
+ (BOOL)isSubclassOfClass:(Class)aClass
有关消息转发
unrecognized selector sent to instance,这种错误应该不少见,调用了类不存在的方法导致Crash,在崩溃前我们有三次机会挽救一下