实例变量与属性的区别
2020-09-08 本文已影响0人
Queen_BJ
@property关键字声明属性
@property (nonatomic, copy)NSString *userName;
.m文件中,编译器自动生成一个实例变量_userName以及setter和getter方法。在.m文件中可以直接的使用_userName实例变量,也可以通过属性self.userName都是一样的。
@synthesize
1、指定与属性对应的实例变量
例如@synthesize myButton = xxx,那么self.myButton其实是操作的实例变量xxx
在实际的项目中,我们一般这么写.m文件
2、@synthesize myButton;
这样写了之后,编译器会自动生成myButton的实例变量以及相应的getter和setter方法,注意:_myButton这个实例变量是不存在的,因为自动生成的实例变量为myButton而不是_myButton,所以现在@synthesize的作用就相当于指定实例变量
如果.m文件中写了@synthesize myButton;那么生成的实例变量就是myButton;如果没写@synthesize myButton;那么生成的实例变量就是_myButton
- @synthesize age = _age
setter和getter实现中会访问成员变量_age - @synthesize age
setter和getter实现中会访问@synthesize后同名成员变量age
成员变量、实例变量、属性变量的联系
@interface MyViewController :UIViewControlle
{
UIButton *yourButton;
int count;
id data;
}
@property (nonatomic, strong) UIButton *myButton;
@end
- 在{ } 中所声明的变量都为成员变量。 所以yourButton、count、data都是成员变量
-实例变量本质上就是成员变量,只是实例是针对类而言,实例是指类的声明。{ }中的yourButton就是实例变量 - 成员变量用于类内部,无需与外界接触的变量,就是私有变量
- 属性变量的好处就是允许让其他对象访问到该变量
综上所述可知:成员变量是定义在{}号中的变量,如果变量的数据类型是一个类则称这个变量为实例变量。实例变量是成员变量的一种特殊情况