今天閑來無事,突然想到使用runtime獲取類中的私有成員,然后進行KVC賦值. (其實這種小方法,在一年之前就看到過, 只不過當時還不怎么明白,算是竊取別人的成果了)
首先創(chuàng)建一個People類,在.m中創(chuàng)建私有成員變量.
#import "People.h"
@interface People()
{
NSString *name;
}
@property (nonatomic, copy)NSString *age;
@end
@implementation People
@end
然后在viewController中通過runtime獲取私有變量(雖然咱自己知道私有成員變量名字是什么,這里假設(shè)不知道私有成員變量的名字)
#pragma mark ----使用runtime獲取成員變量列表
unsigned int count;
Ivar *peopleList = class_copyIvarList([People class], &count);
for (unsigned int i = 0; i < count; i++)
{
Ivar peopleIvar = peopleList[i];
const char *ivarName = ivar_getName(peopleIvar);
NSLog(@"peopleIvarName == %@",[NSString stringWithUTF8String:ivarName]);
}
通過打印知道私有變量名字,然后就可以通過KVC賦值了(其實在項目中,我?guī)缀蹙蜎]用到過KVC進行賦值)
#pragma mark ----使用KVC進行賦值
[peopleObject setValue:@"23" forKey:@"age"];
NSString *peopleAge = [peopleObject valueForKey:@"age"];
NSLog(@"peopleName == %@", peopleAge);
[peopleObject setValue:@"吳曉群" forKey:@"name"];
NSString *peopleName = [peopleObject valueForKey:@"name"];
NSLog(@"peopleName == %@", peopleName);
OK了,這樣就可以給類中私有成員變量賦值了