iOS开发

iOS 面试汇总 - Runtime

2018-03-21  本文已影响27人  FunkyRay

Runtime是什么

消息传递过程

// 1.拯救实例方法
+ (BOOL)resolveInstanceMethod:(SEL)sel {
    return [super resolveInstanceMethod:sel];    
}


// 2.如果上一个方法返回 NO ,运行时就会移到下一步:
// 消息转发
- (id)forwardingTargetForSelector:(SEL)aSelector {    
    return [super forwardingTargetForSelector:aSelector];
}


// 3.如果上一个方法还是没有实现,那还有最后一次拯救机会:
// 3.1.首先它会发送该消息获得函数的参数和返回值类型。
- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector {
    
    NSMethodSignature *signature = [super methodSignatureForSelector:aSelector];
    return signature;
}

// 3.2.如果上一个方法返回 nil ,Runtime 则会发出该方法,程序这时也就挂掉了。
- (void)doesNotRecognizeSelector:(SEL)aSelector {
    
}

// 3.3.如果返回了一个函数签名,Runtime 就会发出该方法。
- (void)forwardInvocation:(NSInvocation *)anInvocation {
    
}

常用Runtime函数

参考文章链接:

http://tech.glowing.com/cn/objective-c-runtime/
http://blog.csdn.net/coyote1994/article/details/52355026

demo链接:

https://github.com/liuleiai1/Runtime_Demo/tree/master

上一篇 下一篇

猜你喜欢

热点阅读