方法一:KVC(鍵值編碼)
定義Person類
.h文件
@interface Person : NSObject
@private
//name為私有屬性
@property (nonatomic, copy) NSString *name;
@end
.m文件
@implementation Person
@end
在某控制器中訪問或修改Person類的私有屬性name
首先記得引入頭文件,然后看下面具體實(shí)現(xiàn)
@implementation ViewController
- (void)viewDidLoad{
[super viewDidLoad];
Person *p = [Person new];
//修改私有屬性的值
[p setValue:@"yyMae" forKey:@"name"];
//訪問私有屬性的值
NSString *name = [p valueForKey:@"name"];
}
方法二:通過runtime獲取或修改一個(gè)類私有屬性的值
同上定義Person類
.h文件
@interface Person : NSObject
@private
//name為私有屬性
@property (nonatomic, copy) NSString *name;
@end
.m文件
@implementation Person
@end
在某控制器中訪問或修改Person類的私有屬性name
首先記得引入頭文件,然后看下面具體實(shí)現(xiàn)
@implementation ViewController
- (void)viewDidLoad{
[super viewDidLoad];
Person *p = [Person new];
// IVar是runtime聲明的一個(gè)宏
unsigned int count = 0; //count記錄變量的數(shù)量
// 獲取類的所有屬性變量
Ivar *members = class_copyIvarList([Person class], &count);
for (int i = 0; i < count; i++) {
Ivar ivar = members[i];
// 取得屬性名并轉(zhuǎn)成字符串類型
const char *memberName = ivar_getName(ivar);
NSLog(@"%s",memberName);
Ivar name = members[0];
// 修改屬性值
object_setIvar(Person, name, @"yyMae");
}