还是老样子,直接入正题。势必今天开始不再混淆成员变量、实例变量、属性!
有成员变量、私有成员变量;
实例变量、私有实例变量;
属性变量、私有属性变量;
成员变量
关于成员变量:
- 是写在{ }里面的;
- 成员变量是不会生成get、set方法的;
- 包含实例变量和基本变量类型,无需与外界接触;
实例变量
实例变量,也就是可以进行实例话的变量。所以实例变量不包括基本数据类型,如int、double、float。
实例变量其实是成员变量的一种特例。所以实例变量也是类内部使用的,无需与外部接触的变量。
属性
- 编译器自动将变量的set和get方法的合成;
- 可用点语法读取,可作为变量使用,可与外界接触。
代码举例
.h:
@interface LWDCategory : NSObject {
UIButton * _button;// 成员变量,也是实例变量
int _totalNum; // 成员变量,不是实例变量
}
@property (nonatomic , strong) UIButton * button; // 属性变量
.m:
@interface LWDCategory (){
UIButton * _innerButton; // 私有成员变量,也是私有实例变量
int _innerTotalNum;// 私有成员变量,不是私有实例变量
}
@property (nonatomic , strong) UIButton * innerButton;// 私有属性变量
关于私有
- 私有成员属性和私有属性变量是指定义在.m文件中的属性。在.m中定义的成员变量不能和它的头文件.h中的成员变量同名。
- 外部给成员变量赋值,只能是通过setValue:forKey和valueForKey来实现。
- 变量有三种权限:分别是@private、@protected、@public。
- 如果属性写在.m文件中就相当于@private私有属性,给其添加@public就变成公开属性。
Person内声明成员变量:
@interface Person()
{
NSString * name;
}
@end
-----------------------------------
调用:
- (void)viewDidLoad {
[super viewDidLoad];
Person * person = [[Person alloc] init];
[person setValue:@"lll" forKey:@"name"];
NSLog(@"name:%@",[person valueForKey:@"name"]);//打印:name:lll
}
网友评论