使用runtime獲取私有成員,然后使用KVC賦值

今天閑來無事,突然想到使用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了,這樣就可以給類中私有成員變量賦值了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 對于從事 iOS 開發(fā)人員來說,所有的人都會答出【runtime 是運行時】什么情況下用runtime?大部分人能...
    夢夜繁星閱讀 3,732評論 7 64
  • 這篇文章完全是基于南峰子老師博客的轉(zhuǎn)載 這篇文章完全是基于南峰子老師博客的轉(zhuǎn)載 這篇文章完全是基于南峰子老師博客的...
    西木閱讀 30,585評論 33 466
  • 你要知道的KVC、KVO、Delegate、Notification都在這里 轉(zhuǎn)載請注明出處 http://www...
    WWWWDotPNG閱讀 2,933評論 2 5
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,200評論 30 471
  • 不怕千萬人阻擋,只怕自己投降 曾對自己許下過無數(shù)的愿望,一定要怎樣怎樣,可是堅持,放棄,放棄,堅持,到最后一事無成...
    月非寒不寒閱讀 727評論 0 0