使用runtime获取私有成员,然后使用KVC赋值

今天闲来无事,突然想到使用runtime获取类中的私有成员,然后进行KVC赋值. (其实这种小方法,在一年之前就看到过, 只不过当时还不怎么明白,算是窃取别人的成果了)
首先创建一个People类,在.m中创建私有成员变量.

#import "People.h"
@interface People()
{
    NSString *name;
}
@property (nonatomic, copy)NSString *age;
@end
@implementation People

@end

然后在viewController中通过runtime获取私有变量(虽然咱自己知道私有成员变量名字是什么,这里假设不知道私有成员变量的名字)

#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赋值了(其实在项目中,我几乎就没用到过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了,这样就可以给类中私有成员变量赋值了

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

推荐阅读更多精彩内容

  • 对于从事 iOS 开发人员来说,所有的人都会答出【runtime 是运行时】什么情况下用runtime?大部分人能...
    梦夜繁星阅读 9,082评论 7 64
  • 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的...
    西木阅读 30,709评论 33 466
  • 你要知道的KVC、KVO、Delegate、Notification都在这里 转载请注明出处 http://www...
    WWWWDotPNG阅读 8,156评论 2 5
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,314评论 30 472
  • 不怕千万人阻挡,只怕自己投降 曾对自己许下过无数的愿望,一定要怎样怎样,可是坚持,放弃,放弃,坚持,到最后一事无成...
    月非寒不寒阅读 3,961评论 0 0