@property的使用
2018-11-05 本文已影响0人
SimpleSJ
1.@proprety的作用
- @property是编译器的指令
- @proprety最初的最用是:用在声明文件中(.h)告诉编译器声明成员变量的的访问器(getter/setter)方法,配合@synthesize使用.
- 自从Xcode 4.x后,@property可以同时生成setter和getter的声明和实现
- 默认情况下,setter和getter方法中的实现,会去访问下划线 _ 开头的成员变量。
- 如果没有会自动生成一个_开头的成员变量,自动生成的成员变量是私有变量, 声明在.m中,在其它文件中无法查看,但当可以在本类中查看
- 如果需要对数据进行判断需要我们之间重写getter/setter方法
- 若手动实现了setter方法,编译器就只会自动生成getter方法
- 若手动实现了getter方法,编译器就只会自动生成setter方法
- 若同时手动实现了setter和getter方法,编译器就不会自动生成不存在的成员变量
2.@proprety修饰符
- readonly修饰符,readonly 只生成getter方法,不生成setter方法
- 指定所生成的方法的方法名称
- getter=你定制的getter方法名称
- setter=你定义的setter方法名称(注意setter方法必须要有 :)
🌰:
@interface Person : NSObject
@property (readonly) int age;
@property (assign,nonatomic,getter=isOpen)BOOL open;
@end
//控制器中调用
Person *p = [[Person alloc]init];
//p.age = 10; //报错,因为这一行代码,编译时自动转换为[p setAge:10];,而readonly修饰符修饰的变量不生成setter方法
NSLog(@"---%d",p.age);//输出:---0
p.open = YES;//访问时,使用setter方法,正常赋值
if(p.isOpen){
//使用getter方法时,转换为isOpen,因为修饰符修改了getter方法的方法名
}