美文网首页iOS技术专题iOS Developer
iOS用runtime访问隐藏的成员变量

iOS用runtime访问隐藏的成员变量

作者: HuyaRC | 来源:发表于2016-10-28 13:38 被阅读40次

runtime是一个c和汇编写的动态库,将OC和C紧密关联,主要做两件事 :

1、封装C语言的结构体和函数,让开发者在运行时创建、检查或者修改类、对象和方法等等。

2、传递消息,找出方法的最终执行代码。

使用:

1>导入框架  #import <objc/runtime.h> #import <objc/Message.h>

2> 以改变 UITextField 的 placeholder 的颜色为例:

    UITextField 没有提供修改placeholder颜色的属性给我们,但是我们可以通过runtime获取UITextField隐藏的成员变量:

// 拷贝出所有的成员变量列表

Ivar *ivars = class_copyIvarList([UITextField class], &count);

for (int i = 0; i<count;i++){

// 取出成员变量

Ivar ivar = ivars[i];

// 打印成员变量名字和对应的类型

NSLog(@"%s %s", ivar_getName(ivar), ivar_getTypeEncoding(ivar));

}

// 释放

free(ivars)

输出所有的成员变量

改变 placeholder 的颜色

UITextField *tf =[[UITextField alloc]initWithFrame:CGRectMake(100, 100, 200 ,30)];

tf.backgroundColor = [UIColor grayColor];

tf.placeholder = @"运行时";

[self.view addSubview:tf];

[tf setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"];

结果:

运行结果,修改成功

相关文章

网友评论

    本文标题:iOS用runtime访问隐藏的成员变量

    本文链接:https://www.haomeiwen.com/subject/grceuttx.html