消息傳遞

屏幕快照 2018-11-17 上午11.00.23.png

屏幕快照 2018-11-17 上午11.01.37.png
緩存查找
哈希查找

屏幕快照 2018-11-17 上午11.10.23.png
在當(dāng)前類中查找
對于已排序號的列表 采用二分查找算法查找方法對應(yīng)執(zhí)行函數(shù)
對于沒有排序的列表,采用一般遍歷查找方法對應(yīng)執(zhí)行函數(shù)

屏幕快照 2018-11-17 上午11.13.17.png
三種查找方式
緩存 -> 哈希算法查找
當(dāng)前類 -> 已排序 二分查找算法 未排序 遍歷
通過isa父類
消息轉(zhuǎn)發(fā)
實例轉(zhuǎn)發(fā)流程:
屏幕快照 2018-11-17 上午11.20.25.png
void testImp (void)
{
NSLog(@"test invoke");
}
+ (BOOL)resolveInstanceMethod:(SEL)sel
{
// 如果是test方法 打印日志
if (sel == @selector(test)) {
NSLog(@"resolveInstanceMethod:");
// 動態(tài)添加test方法的實現(xiàn)
class_addMethod(self, @selector(test), testImp, "v@:");
return YES;
}
else{
// 返回父類的默認調(diào)用
return [super resolveInstanceMethod:sel];
}
}
- (id)forwardingTargetForSelector:(SEL)aSelector
{
NSLog(@"forwardingTargetForSelector:");
return nil;
}
- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
{
if (aSelector == @selector(test)) {
NSLog(@"methodSignatureForSelector:");
// v 代表返回值是void類型的 @代表第一個參數(shù)類型時id,即self
// : 代表第二個參數(shù)是SEL類型的 即@selector(test)
return [NSMethodSignature signatureWithObjCTypes:"v@:"];
}
else{
return [super methodSignatureForSelector:aSelector];
}
}
- (void)forwardInvocation:(NSInvocation *)anInvocation
{
NSLog(@"forwardInvocation:");
}
你