成员属性和成员变量的区别
成员变量和成员属性的关系
- 属性对成员变量扩充了存取方法 .
- 属性默认会生成带下划线的成员变量 .
- 但只声明了变量,是不会有属性的,可以通过以下代码证明
在Person.h 头文件中
@interface Person : NSObject { @private //name为私有成员变量 NSString *name; } // age 为成员属性 @property (nonatomic ,copy) NSString *age;
在viewController.m 中,通过RunTime机制获得对象的所有成员变量和成员属性。
Person *p = [Person new]; 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); } // 获取类的所有成员属性 objc_property_t *properties =class_copyPropertyList([Person class], &count); for (int i = 0; i<count; i++) { objc_property_t property = properties[i]; const char* char_f =property_getName(property); NSString *propertyName = [NSString stringWithUTF8String:char_f]; NSLog(@"属性名 = %@",propertyName); }
打印结果为
2016-08-12 11:31:50.225 modifyPrivate[777:143231] 变量名 = name 2016-08-12 11:31:50.226 modifyPrivate[777:143231] 变量名 = _age 2016-08-12 11:31:50.226 modifyPrivate[777:143231] 属性名 = age
posted on 2019-07-15 08:19 东方🐺 阅读(828) 评论(0) 编辑 收藏 举报