标签:属性 exchange policy 对象产生 ram 没有 lan param ref
##什么是RunTime机制
C语言在编译的时候就知道调用哪个方法
[p eat]
消息机制 任何方法调用 本质都是发送消息
[p performSelector:@selector(<#selector#>)]
#import <objc/message.h> 倒入运行时框架
运行时发送消息 谁做事情就去调用谁 xcode5以后 不给底层的方法让开发者调用
调用类方法 其实 就是变成一个类对象 本质 类名转换成类对象
###利用runtime 交换方法的实现
+(void)load{
Method imageName = class_getClassMethod([UIImage class], @selector(imageNamed:));
method_exchangeImplementations(imageName, ttmIimge);
Method ttmIimge = class_getClassMethod([UIImage class], @selector(ttm_imagenamed:))
}
###动态添加方法
当一个方法没有实现 但是又调用了这个方法 就会调用resolveInstanceMethod这个方法
+(BOOL)resolveInstanceMethod:(SEL)sel{
if ([NSStringFromSelector(sel) isEqualToString:@"eat"]) {
/**
* <#Description#>
*
* @param cls#> 给那个类 description#>
* @param name#> 添加方法的编号 description#>
* @param imp#> 方法实现 入口 函数名 description#>
* @param types#> 方法类型 description#>
*
* @return <#return value description#>
*/
class_addMethod([self class], @selector(resolveThisMethodDynamically), (IMP) myMethodIMP, "v@:");
}
} +(BOOL)resolveClassMethod:(SEL)sel{}
###动态添加属性
给nsobject 增加一个属性
/**
跟对象产生一个关联属性
*
* @param object#> 要产生管理的属性 description#>
* @param key#> 属性名字 description#>
* @param value#> 属性的值 description#>
* @param policy#> 策略 就是 strong之类的 description#>
*
* @return
*/
objc_setAssociatedObject(<#id object#>, <#const void *key#>, <#id value#>, <#objc_AssociationPolicy policy#>)
objc_getAssociatedObject(<#id object#>, <#const void *key#>)
标签:属性 exchange policy 对象产生 ram 没有 lan param ref
原文地址:https://www.cnblogs.com/petewell/p/11601730.html