首先我们创建一个Person类。
属性name 、方法publicMethod是公共的。
属性address、方法privateMethod是私有的。
@interface Person : NSObject
@property (nonatomic,copy) NSString *name;
//公共的
- (void)publicMethod;
@end
#import "Person.h"
@interface Person()
@property (nonatomic,copy) NSString *address;
@end
@implementation Person
- (instancetype)init {
self = [super init];
if (self) {
_address = @"私有属性北京";
self.name = @"孟孟";
}
return self;
}
//公共方法
- (void)publicMethod {
NSLog(@"对外暴露的方法 %@",self.address);
}
//私有方法
- (void)privateMethod {
NSLog(@"私有方法%@",self.name);
}
//重写了系统的description方法。
- (NSString *)description {
return [NSString stringWithFormat:@" %@, %@",self.address,self.name];
}
@end
然后我们对私有变量进行修改。比如修改私有属性address的值。
#pragma mark - 对私有变量的更改
- (void)changePrivate {
Person *onePerson = [[Person alloc] init];
NSLog(@"Person属性 == %@",[onePerson description]); //屌日的这是重写了。
unsigned int count = 0;
Ivar *members = class_copyIvarList([Person class], &count);
for (int i = 0; i < count; i++){
Ivar var = members[i];
const char *memberAddress = ivar_getName(var);
const char *memberType = ivar_getTypeEncoding(var);
NSLog(@"获取所有属性 = %s ; type = %s",memberAddress,memberType);
}
//对私有变量的更改
Ivar m_address = members[1];
object_setIvar(onePerson, m_address, @"上海");
NSLog(@"对私有变量的(地址)进行更改 : %@",[onePerson description]);
}