@porperty
@porperty是一个编译器指令
在Xocde4.4之前, 可以使用@porperty来代替getter/setter方法的声明, 也就是说我们只需要写上@porperty就不用写getter/setter方法的声明
2.编译器只要看到@property,就知道我们要生成某一个属性的getter/setter方法的声明
@propertyde格式
@property数据类型变量名
property增强
从Xcode4.4以后,对@property进行了增强, 以后只要利用一个@property就可以同时生成setter/getter方法的声明和实现
如果没有告诉@property要将传入的参数赋值给谁, 默认@property会将传入的属性赋值给_开头的成员变量
@property的使用场景
如果不想对传入的数据进行过滤, 仅仅是提供方法给外界操作成员变量, 那么就可以使用@property ,并且系统会自动给我们生成一个_开头的成员变量
使用property增强后,什么时候要重写getter/setter方法
使用property增强,只会生成最简单的getter/setter方法的声明和实现, 并不会对传入的数据进行过滤
如果想对传入的数据进行过滤, 那么我们就必须重写getter/setter方法
重写getter/setter方法有哪些注意点
如果重写了setter方法, 那么property就只会生成getter方法
如果重写了getter方法, 那么property就只会生成setter方法
如果同时重写了getter/setter方法, 那么property就不会自动帮我们生成私有的成员变量
@property修饰符
增强@property使用修饰符后的的格式
格式:
@property(属性修饰符) 数据类型变量名称;
@property 有哪些修饰符?各有什么作用?
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;
@synthesize
synthesize是一个编译器指令, 它可以简化我们getter/setter方法的实现
@synthesize age = _age; 在给age赋值时,编译器做了哪些事
@synthesize age = _age;
1.在@synthesize后面的age,告诉编译器, 需要实现哪个@property生成的声明
2.告诉@synthesize, 需要将传入的值赋值给谁和返回谁的值给调用者
如果在@synthesize后面没有告诉系统将传入的值赋值给谁, 系统默认会赋值给和@synthesize后面写得名称相同的成员变量@synthesize age;