一、Runtime的理解

  OC是面向对象的语言这是常识,其实就是通过Runtime机制动态创建类和对象,这里只是简单的运用runtime的使用!

二、类别(category)添加属性_使用前记得导入头文件#import <objc/runtime.h>

  通过这三个方法动态的绑定属性

OBJC_EXPORT void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)
OBJC_AVAILABLE(10.6, 3.1, 9.0, 1.0);//set方法
OBJC_EXPORT id objc_getAssociatedObject(id object, const void *key)
OBJC_AVAILABLE(10.6, 3.1, 9.0, 1.0);//get方法
OBJC_EXPORT void objc_removeAssociatedObjects(id object)
OBJC_AVAILABLE(10.6, 3.1, 9.0, 1.0);//移除

  eg:

- (void)setName:(NSString *)name{

//    OBJC_ASSOCIATION_ASSIGN = 0,           //assign
// OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1, //retaion , nonatomic
// OBJC_ASSOCIATION_COPY_NONATOMIC = 3, //copy , nonatomic
// OBJC_ASSOCIATION_RETAIN = 01401, //retain
// OBJC_ASSOCIATION_COPY = 01403 //copy
/**
实现set方法 @param object#> self description#>
@param key#> 属性的键值统一就行 description#>
@param value#> 属性的值 description#>
@param policy#> 和copy,retain,assign类似 description#>
*/
objc_setAssociatedObject(self, nameKey, name, OBJC_ASSOCIATION_COPY_NONATOMIC);
} //定义常量 属性的键值统一
static char *nameKey = "nameKey"; - (NSString *)name{
/**
实现get方法 @param object#> 这是填self description#>
@param key#> 属性的键值统一就行 description#>
*/
return objc_getAssociatedObject(self, nameKey);

三、两个方法的执行替换

    SEL originalSelector = NSSelectorFromString(@"原来方法名");
SEL swizzledSelector = NSSelectorFromString(@"需要替换的方法名");
Method originalMethod = class_getInstanceMethod([self class], originalSelector);
Method swizzledMethod = class_getInstanceMethod([self class], swizzledSelector);
method_exchangeImplementations(originalMethod, swizzledMethod);

最新文章

  1. weinre targets none 的问题
  2. 黄聪:日租VPS中FileZilla_Server配置方法
  3. ASP.NET MVC图片上传前预览
  4. nyoj130 相同的雪花
  5. Android常见控件— — —Button
  6. margin:0 auto;不能居中的原因
  7. Android用路径api在内部存储读写文件
  8. Cocos2d-android (05) 渐变动画(颜色,淡入淡出。。。)
  9. Object -C @property -- 笔记
  10. ps存jpeg,格式保存的时候为什么选择“基线”
  11. Spring Cloud微服务笔记(二)Spring Cloud 简介
  12. [20181109]12c sqlplus rowprefetch参数5
  13. phpmyadmin拿webshell
  14. Python-面向对象(组合、封装与多态)
  15. django 静态css js文件配置
  16. kail linux 系统下利用metaspolit工具渗透win7电脑
  17. IT运维队伍的管理
  18. 洛谷P2322 最短母串问题 [HNOI2006] AC自动机
  19. Top 5 SSH Clients for Windows (Alternatives of PuTTY)
  20. 温故而知新-array_walk和sizeof和array_count_values()和extract()

热门文章

  1. HTML_案例(注册案例CSS版)
  2. 笔记:Python防止SQL注入
  3. js数学公式-曲线运动
  4. [JZOJ4616] 【NOI2016模拟7.12】二进制的世界
  5. 【JZOJ6357】小ω的图(graph)
  6. 廖雪峰Java16函数式编程-2Stream-6reduce
  7. thinkphp 模板注释
  8. 牛客多校第四场 A meeting 树的半径
  9. 如何查找一个命令由哪个rpm安装&amp;&amp;rpm 的相关查询方法
  10. 19.SimLogin_case03