測試_獲取私有屬性列表/修改私有屬性的值

私有屬性類 Person.m文件
#import "Person.h"

@interface Person ()

@property (nonatomic, strong) NSString *name;

@property (nonatomic, strong) NSNumber *age;

@property (nonatomic, assign) BOOL gender;

@end

@implementation Person

- (NSString *)description {
return [NSString stringWithFormat:@"%@-%@-%d",_name,_age,_gender];
}

@end

Person *person = [Person new];

unsigned int count = 0;

Ivar *members = class_copyIvarList([Person class], &count);//獲取的倒序屬性列表
for (int i = 0; i < count; i ++) {
    const char *memberName = ivar_getName(members[i]);
    NSLog(@"%s",memberName);//屬性名帶有_前綴,例如_name
    
    Ivar m_name = members[i];

pragma mark -----修改私有屬性的值1

    object_setIvar(person, m_name, @1);//設置時,對象和基本類型不能相互賦值
    NSLog(@"%@",[person description]);
}

pragma mark -----修改私有屬性的值2

[person setValue:@"zhangsan" forKey:@"name"];
[person setValue:@"nihao" forKey:@"gender"];//給基本屬性賦值對象,不起作用

NSLog(@"%@",[person description]);

objc_property_t *member = class_copyPropertyList([Person class], &count);//正序屬性列表

for (int i = 0; i < count; i ++) {
    const char *memberName = property_getName(member[i]);
    NSLog(@"%s",memberName);// 打印原始屬性名

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

推薦閱讀更多精彩內容