iOS私有属性的访问与修改
2017-05-03 19:10
260 查看
// Son.m #import "Son.h" @interface Son () // 将属性放在.m文件中,使之成为私有属性 @property (nonatomic, copy) NSString *name; @end
// Father.m #import "Father.h" #import "Son.h" #import <objc/runtime.h> @implementation Father #pragma mark - KVC 方式访问和修改私有变量 - (void)printSonNameWithKVC { Son *son = [[Son alloc] init]; // 修改前 NSString *name = [son valueForKey:@"name"]; NSLog(@"-name:%@", name); // 修改后 [son setValue:@"Jabit" forKey:@"name"]; NSString *nameReset = [son valueForKey:@"name"]; NSLog(@"-nameReset:%@", nameReset); } #pragma mark - Runtime 方式访问和修改私有变量 - (void)printSonNameWithRuntime { Son *son = [[Son alloc] init]; unsigned int count = 0; Ivar *members = class_copyIvarList([Son class], &count); for (int i = 0; i < count; i++) { Ivar ivar = members[i]; const char *memberName = ivar_getName(ivar); const char *memberType = ivar_getTypeEncoding(ivar); //依次打印属性名称和属性类型 NSLog(@"%s : %s", memberName, memberType); if (strcmp(memberName, "_name") == 0) { // 修改前 NSString *name = (NSString *)object_getIvar(son, members[i]); NSLog(@"-name:%@", name); // 修改后 object_setIvar(son, members[i], @"Jabit"); NSString *nameReset = (NSString *)object_getIvar(son, members[i]); NSLog(@"-nameReset:%@", nameReset); break; } } } @end
相关文章推荐
- iOS开发中访问并修改一个类的私有属性
- iOS中访问和修改一个类的私有属性
- 访问或修改一个类的私有属性
- iOS runtime访问/修改私有变量
- iOS 【KVC的拓展-key&keyPath区别/修改私有属性/取值/数组求和&平均值】
- 如何访问和修改一个对象的私有属性
- 通过反射访问私有属性并对其进行修改
- iOS中的私有属性问题
- iOS UIView类扩展,直接访问属性 —— HERO博客
- Python的私有属性的特殊访问方法
- 《Effective C#》Item 1:用属性来访问类的私有成员
- C#反射(有参构造+访问私有属性)
- ios修改hosts文件后访问网址114导航域名无法解析问题
- Python访问私有属性
- AddressBook 地址簿 (电话簿) 访问与修改-IOS开发
- 如何访问一个文件的创建、修改时间、文件属性
- iOS通过shell脚本批量修改属性
- IOS-48-解决开发中自定义控件在不同型号手机上不能显示的问题 (区别在于iOS修改了weak、strong属性)
- iOS中,访问系统隐私权限时修改alert文案的方法
- iOS访问类的私有成员变量及私有方法