获取属性
objc_property_t * propertys = class_copyPropertyList(clazz, &outCount);

获取属性名
NSString * key = [NSString stringWithCString:property_getName(property) encoding:NSUTF8StringEncoding];

获取属性的描述
NSString * attributesString = [NSString stringWithCString:property_getAttributes(property) encoding:NSUTF8StringEncoding];

获取方法
Method * methods = class_copyMethodList(clazz, &outCount);

获取方法名
NSStringFromSelector(method_getName(method));

获取成员变量
Ivar * vars = class_copyIvarList(clazz,&outCount);

获取成员变量名
NSString * varName = [NSString stringWithCString:ivar_getName(var) encoding:NSUTF8StringEncoding];

使用runtime的方式执行方法调用

objc_msgSend(p, @selector(setAge:),20);

- (void)my_setValue:(id)value forKeyPath:(NSString *)keyPath
{

id obj = self;

// 将keyPath中的属性逐个分开存到数组中
NSArray * array = [keyPath componentsSeparatedByString:@"."];

// 获得最后一个属性
NSString * propertyName = [array lastObject];

// 遍历得到最后一个属性的get方法
for(NSUInteger i = 0; i < array.count - 1; i++)
{

SEL getSel = NSSelectorFromString(array[i]);

obj = objc_msgSend(obj, getSel);

}

propertyName = [NSString stringWithFormat:@"set%@:", [propertyName capitalizedString]];

SEL setSel = NSSelectorFromString(propertyName);

// 发送消息调用set方法赋值
objc_msgSend(obj, setSel, value);

}

runtime学习笔记的更多相关文章

  1. 我的runtime学习笔记

    0.简介: OC方法不同于C语言函数,属于动态调用过程,在编译的时候并不能决定真正调用哪个函数,只有在真正运行的时候才会根据函数的名称找到对应的函数来调用. 至于其他理论上的东西不必讲太多,编程讲的就 ...

  2. iOS Runtime学习笔记

    Associated Objects: @interface NSObject (AssociatedObject) @property (nonatomic, strong) id associat ...

  3. Objective-C RunTime 学习笔记 之 消息转发流程

    1) 当向某个对象发送消息时,先从cache(cache_t)中查找方法对象(method_t),如果找到则进行回调:否则通过查找对象的类(元类)定义中方法列表,一直追溯到NSObject, 如果找到 ...

  4. Objective-C RunTime 学习笔记 之 atomic/nonatomic 关键字

    atomic修饰的是变量/方法,对于可变对象的指针变量是安全的,内部实现加了锁,但是对可变对象本身没什么影响,不安全还是不安全.另外atomic仅仅对编译器生产的getter.setter有效,如果自 ...

  5. Objective-C RunTime 学习笔记 之 AutoReleasPool

    1.结构 struct magic_t {     /* 魔法 */     static const uint32_t M0 = 0xA1A1A1A1; #   define M1 "AU ...

  6. Objective-C RunTime 学习笔记 之 基础结构体

    1.OC 运行期常用对象结构体 基本的结构体定义 typedef objc_class Class; /* 类 */ typedef objc_object *id; /* 各种类型,只要第一个字段为 ...

  7. Flink学习笔记:Flink Runtime

    本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKhaz ...

  8. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  9. WeX5学习笔记

    目录 WeX5学习笔记... 1 1.轻松看透WeX5产品能力和技术... 1 2.WeX5可以怎么玩?... 3 一.纯本地App. 3 二.关联一个网站,希望默认就打开某页... 4 三.UI设计 ...

随机推荐

  1. 30天C#基础巩固----Lambda表达式

         这几天有点不在状态,每一次自己很想认真的学习,写点东西的时候都会被各种小事情耽误,执行力太差.所以自己反思了下最近的学习情况,对于基础的知识,可以从书中和视频中学习到,自己还是需要注意下关于 ...

  2. helper实现隐藏前台特效

    想实现下面的功能:如下图所示 点击已结束按钮,使上面的红色跳转到已结束活动按钮上面,本来前台代码里面是使用了一个action来实现的,但是我改了点东西,使跳转不了. 前台代码 <ul class ...

  3. 自己对Debug的一些感悟

    A.13-03-06记. 1.当项目中发现bug的时候,首先考虑如何重现,能够重现的bug比较好找寻根源. 2.思考下以前是否发现过类似bug,是否由一些外部配置所决定. 3.有循环时候注意临界条件.

  4. 微信--获取jsapi_ticket 然后在计算出signature

    最近做微信公众号,记录一下,仅供参看. 关于jsapi_ticket微信公众号有相关说明: 生成签名之前必须先了解一下jsapi_ticket,jsapi_ticket是公众号用于调用微信JS接口的临 ...

  5. 【从API学英语】-DriverManager

    原文: The basic service for managing a set of JDBC drivers. NOTE: The DataSource interface, new in the ...

  6. Eclipse常用的快捷键

    Eclipse常用快捷键 1,       Ctrl+S,保存文档. 2,       Tab,多行同时右移:选中多行 3,       shlft+tab,多行同时左移,选中多行 4,       ...

  7. iOS取得AddressBook联系人信息

    新建一个CContact类用于存放联系人信息,下面是该类的代码: CContact.h代码: 01 #import <Foundation/Foundation.h> 02   03   ...

  8. ThinkCMF-幻灯片制作

    在后台的扩展工具 -> 幻灯片分类 添加分类标识为"portal_index"的分类,然后在此分类添加幻灯片. 个人认为,此处可以用于: 1. 门户网站的首页幻灯片播放功能: ...

  9. Lock的实现之ReentrantLock详解

    摘要 Lock在硬件层面依赖CPU指令,完全由Java代码完成,底层利用LockSupport类和Unsafe类进行操作: 虽然锁有很多实现,但是都依赖AbstractQueuedSynchroniz ...

  10. C++析构函数调用异常问题研究

    最近又遇到一个奇葩问题,程序在自己的开发机器和某些机器上运行完好,但是在测试人员的几台机器上运行就直接推出了.开始以为是出现了野指针,因为delete野指针时程序会直接退出.代码翻来覆去过来即便确认没 ...