@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;
上一篇下一篇

猜你喜欢

热点阅读