zoukankan      html  css  js  c++  java
  • 成员属性和成员变量的区别

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

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

    在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
  • 相关阅读:
    [hdu4035]maze
    [codeforce][148d]
    [bzoj3507]通配符匹配
    [BZOJ4831]
    子串
    【洛谷1373】小a和uim之大逃离
    【JZOJ6303】演员
    [jzoj6296]选票
    字符串哈希
    [ABC137d&e]RE
  • 原文地址:https://www.cnblogs.com/xujinzhong/p/11186824.html
Copyright © 2011-2022 走看看