##什么是RunTime机制
###利用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,"[email?protected]:");
}
} +(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#>)
原文:大专栏 ?RunTime 动态消息机制
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|