成员属性和成员变量的区别

成员变量和成员属性的关系

  • 属性对成员变量扩充了存取方法 .
  • 属性默认会生成带下划线的成员变量 .
  • 但只声明了变量,是不会有属性的,可以通过以下代码证明

在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
原文地址:https://www.cnblogs.com/xujinzhong/p/11186824.html