@Property
2016-01-09 本文已影响268人
MarkTang
@property是一个编译器指令
编译器只要看到@property,就知道我们生产某一个属性的getter/setter方法的声明
//问题1:@porperty是什么指令?作用是什么?
答:
编译器指令
自动生成getter方法
1.@porperty是一个编译器指令
在Xocde4.4之前, 可以使用@porperty来代替getter/setter方法的声明, 也就是说我们只需要写上@porperty就不用写getter/setter方法的声明
2.编译器只要看到@property,就知道我们要生成某一个属性的getter/setter方法的声明
@property 数据类型 属性名称
@property 数据类型 变量名;
@property增强
//问题1:property增强做了哪些事?
自动生成getter和setter方法,并且生成该成员变量,默认生成的变量是私有变量
答: 从Xcode4.4以后,对@property进行了增强,使用@property做了3件事
@property会根据属性名,自动生成setter/getter方法的声明
@property会根据属性名,自动生成setter/getter方法的实现
@property会根据属性名,自动生成_开头的成员变量,该成员变量是私有变量
//问题2:@property的使用场景?
答:
只能生成简单的setter/getter方法
答: 如果不想对传入的数据进行过滤, 仅仅是提供方法给外界操作成员变量, 那么就可以使用@property ,并且系统会自动给我们生成一个_开头的成员变量
//问题3:使用property增强后,什么时候要重写getter/setter方法?
答:
需要堆属性的值进行过滤
答:使用property增强,只会生成最简单的getter/setter方法的声明和实现, 并不会对传入的数据进行过滤
如果想对传入的数据进行过滤, 那么我们就必须重写getter/setter方法
//问题4:重写getter/setter方法有哪些注意点?
答:
如果重写了setter方法, 那么property就只会生成getter方法,并且生成_开头的成员变量
如果重写了getter方法, 那么property就只会生成setter方法,并且生成_开头的成员变量
如果同时重写了getter/setter方法, 那么property就不会自动帮我们生成私有的_开头成员变量
//问题2:@property 有哪些修饰符?各有什么作用?
答:
readonly 只读
readWrite z 读写 默认情况下自带
1.readwrite: 代表既生成getter方法 , 也生成setter方法
默认情况下 @property就是readwrite的
@property(readwrite) int age;
2.readonly: 代表只生成getter方法不生成setter方法
@property(readonly) NSString * name;
3.给getter方法起了一个别名为abc
- (void)setHeight:(double)height;
- (double)height;
给getter方法起了一个别名为abc
- (void)setHeight:(double)height;
- (double)abc;
@property(getter=abc) double height;
4.给setter方法起了一个别名为tiZhong
- (void)setWeight:(double)weight;
- (void)tiZhong:(double)weight;
@property(setter=tiZhong:) double weight;
// 是否已婚
// 程序员之间有一个约定, 一般情况下获取BOOL类型的属性的值, 我们都会将获取的方法名称改为isXXX
@property(getter=isMarried) BOOL married;