訪問或修改一個類的私有屬性

方法一:KVC(鍵值編碼)

定義Person類
.h文件

@interface Person : NSObject 
@private 
//name為私有屬性
@property (nonatomic, copy) NSString *name; 
@end

.m文件

@implementation Person
@end

在某控制器中訪問或修改Person類的私有屬性name
首先記得引入頭文件,然后看下面具體實現

@implementation ViewController
- (void)viewDidLoad{
  [super viewDidLoad];
  Person *p = [Person new];
  //修改私有屬性的值
  [p setValue:@"yyMae" forKey:@"name"];
  //訪問私有屬性的值
  NSString *name = [p valueForKey:@"name"];
}

方法二:通過runtime獲取或修改一個類私有屬性的值

同上定義Person類
.h文件

@interface Person : NSObject 
@private 
//name為私有屬性
@property (nonatomic, copy) NSString *name; 
@end

.m文件

@implementation Person
@end

在某控制器中訪問或修改Person類的私有屬性name
首先記得引入頭文件,然后看下面具體實現

@implementation ViewController
- (void)viewDidLoad{
  [super viewDidLoad];
  Person *p = [Person new];
  // IVar是runtime聲明的一個宏 
  unsigned int count = 0; //count記錄變量的數量
  // 獲取類的所有屬性變量 
  Ivar *members = class_copyIvarList([Person class], &count); 
  for (int i = 0; i < count; i++) { 
    Ivar ivar = members[i]; 
    // 取得屬性名并轉成字符串類型
    const char *memberName = ivar_getName(ivar);               
    NSLog(@"%s",memberName); 
    Ivar name = members[0]; 
    // 修改屬性值 
    object_setIvar(Person, name, @"yyMae"); 
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容