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
  • 相关阅读:
    将 20M 文件从 30 秒压缩到 1 秒,我是如何做到的?
    Java 四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor
    HTTP返回状态码及错误大全
    network ifconfig
    linux lsof
    thrift types
    thrift concepts
    network uds(Unix domain socket)
    kernel 自定义coredump文件名及位置
    word 段内与段间换行
  • 原文地址:https://www.cnblogs.com/xujinzhong/p/11186824.html
Copyright © 2011-2022 走看看