Ivar 与 objc_property_t区别

本文介绍了Ivar和objc_property_t的区别。Ivar表示类中的全局变量,而objc_property_t代表用@property定义的属性,包括setter和getter。通过示例展示了@property如何生成私有变量,指出Ivar包含@property的所有属性。
摘要由CSDN通过智能技术生成

Ivar:表示类对象中的所有定义的全局变量
objc_property_t:表示类对象中的全局属性,即用@property定义的属性。
例子
用@property定义几个全局变量

@property(nonatomic,strong)NSString *str1;
@property(nonatomic,strong)NSString *str2;
@property(nonatomic,strong)NSString *str3;
@property(nonatomic,strong)NSArray *arr1;
@property(nonatomic,strong)NSDictionary *dic1;
@property(nonatomic,strong)NSSet *set1;

定义几个私有变量

NSInteger _index1;
NSArray *_testArr;
NSDictionary *_dicTest;

测试如下

  unsigned int count = 0;
    Ivar *var = class_copyIvarList([self class], &count);
    for(int i=0;i<count;i++){
        Ivar thisVar = var[i];
        const char *c = ivar_getName(thisVar);
        NSLog(@"2222222222 === %s",c);
    }
    objc_property_t *property = class_copyPropertyList([self class], &count);
    for(int i=0;i<count;i++){
        objc_property_t pro = property[i];
        const char *c = property_getName(pro);
        NSLog(@"999999999999 === %s",c);
    }

结果:

2017-05-15 14:36:27.970358 test111[1688:484174] 2222222222 === _index1
2017-05-15 14:36:27.970460 test111[1688:484174] 2222222222 === _testArr
2017-05-15 14:36:27.970497 test111[1688:484174] 2222222222 === _dicTest
2017-05-15 14:36:27.970564 test111[1688:484174] 2222222222 === _str1
2017-05-15 14:36:27.970598 test111[1688:484174] 2222222222 === _str2
2017-05-15 14:36:27.970630 test111[1688:484174] 2222222222 === _str3
2017-05-15 14:36:27.970664 test111[1688:484174] 2222222222 === _arr1
2017-05-15 14:36:27.970696 test111[1688:484174] 2222222222 === _dic1
2017-05-15 14:36:27.970729 test111[1688:484174] 2222222222 === _set1

2017-05-15 14:36:27.970876 test111[1688:484174] 999999999999 === str1
2017-05-15 14:36:27.970943 test111[1688:484174] 999999999999 === str2
2017-05-15 14:36:27.970976 test111[1688:484174] 999999999999 === str3
2017-05-15 14:36:27.971009 test111[1688:484174] 999999999999 === arr1
2017-05-15 14:36:27.971148 test111[1688:484174] 999999999999 === dic1
2017-05-15 14:36:27.971287 test111[1688:484174] 999999999999 === set1

简单理解:
每一个继承NSObject的类会自动得到runtime的支持,使用@property 方式定义属性时,编译器会自动为我们添加setter,getter方法并定义一个私有变量,变量前自动加_。所以,Ivar会包含@property定义的全部属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值