1. 动态的添加对象的成员变量和方法

1. 动态变量控制

1)Sense:

Teacher: What's your name?

XiaoMing: My name is XiaoMing.

Teacher: Pardon?

XiaoMing: My name is __

在程序当中,假设XiaoMing的name原来的值为XiaoMing,后来被Runtime偷换了一个名字叫Minggo。那么,Runtime是如何做到的呢?

2)Step:

①动态获取XiaoMing类中的所有属性[当然包括私有]

Ivar *ivar = class_copyIvarList([self.xiaoMing class], &count);

②遍历属性找到对应name字段

const char *varName = ivar_getName(var);

③修改对应的字段值成Minggo

object_setIvar(self.xiaoMing, var, @"Minggo");

3)Show Code:

-(void)answer{

     unsigned int count = 0;

     Ivar *ivar = class_copyIvarList([self.xiaoMing class], &count);

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

           Ivar var = ivar[i];

           const char *varName = ivar_getName(var);

           NSString *name = [NSString stringWithUTF8String:varName];

           if ([name isEqualToString:@"_englishName"]) {

                       object_setIvar(self.xiaoMing, var, @"Minggo");

                       break;

              }

     }

     NSLog(@"XiaoMing first answer is %@",self.xiaoMing.englishName);

     self.nameTf.text = self.xiaoMing.englishName;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 对于从事 iOS 开发人员来说,所有的人都会答出【runtime 是运行时】什么情况下用runtime?大部分人能...
    梦夜繁星阅读 9,085评论 7 64
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,845评论 0 9
  • runtime再实际开发中主要应用 1.动态添加一个类 2.通过runtime获取一个类的所有属性,我们可以做些什...
    十里杏坡阅读 4,181评论 0 3
  • Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理。这种动态语言的...
    有一种再见叫青春阅读 3,723评论 0 3
  • 不写两个字 总觉得辜负了自己 写呢 总又会把自己绕进去 本来生活是很好的 最后绕来绕去面目全非 是乎不固作清高 伤...
    江城妖怪阅读 1,683评论 2 3