1. 動(dòng)態(tài)變量控制
Teacher: What's your name?
XiaoMing: My name is XiaoMing.
Teacher: Pardon?
XiaoMing: My name is __
在程序當(dāng)中,假設(shè)XiaoMing的name原來的值為XiaoMing,后來被Runtime偷換了一個(gè)名字叫Minggo。那么,Runtime是如何做到的呢?
①動(dòng)態(tài)獲取XiaoMing類中的所有屬性[當(dāng)然包括私有]
Ivar *ivar = class_copyIvarList([self.xiaoMing class], &count);
②遍歷屬性找到對應(yīng)name字段
const char *varName = ivar_getName(var);
③修改對應(yīng)的字段值成Minggo
object_setIvar(self.xiaoMing, var, @"Minggo");
-(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;
}