property
@property基本概念知识:
1. 【理解】什么是@property
2. 【掌握】@property基本使用
1.什么是@property
@property是编译器的指令
什么是编译器的指令 ?
编译器指令就是用来告诉编译器要做什么!
@property会让编译器做什么呢?
@property 用在声明文件中告诉编译器声明成员变量的的访问器(getter/setter)方法
这样的好处是:免去我们手工书写getter和setter方法繁琐的代码
2.@property基本使用
- 在@inteface中,用来自动生成setter和getter的声明
用@property int age;就可以代替下面的两行
- (int)age; // getter
- (void)setAge:(int)age; // setter
@propert编写步骤
1.在@inteface和@end之间写上@property
2.在@property后面写上需要生成getter/setter方法声明的属性名称, 注意因为getter/setter方法名称中得属性不需要_, 所以@property后的属性也不需要_.并且@property和属性名称之间要用空格隔开
3.在@property和属性名字之间告诉需要生成的属性的数据类型, 注意两边都需要加上空格隔开
@property增强知识:
1. 【掌握】@property增强
2. 【掌握】@property增强注意点
1.@property增强
- 自从Xcode 4.x后,@property可以同时生成setter和getter的声明和实现
@interface Person : NSObject
{
int _age;
}
@property int age;
@end
2.@property增强注意点
默认情况下,setter和getter方法中的实现,会去访问下划线 _ 开头的成员变量
如果没有会自动生成一个_开头的成员变量,自动生成的成员变量是私有变量, 声明在.m中,在其它文件中无法查看,但当可以在本类中查看
- @property只会生成最简单的getter/setter方法,而不会进行数据判断
如果需要对数据进行判断需要我们之间重写getter/setter方法
若手动实现了setter方法,编译器就只会自动生成getter方法
若手动实现了getter方法,编译器就只会自动生成setter方法
若同时手动实现了setter和getter方法,编译器就不会自动生成不存在的成员变量
@property修饰符知识:
1. 【掌握】@property修饰符
- 修饰是否生成getter方法的
readonly 只生成setter方法,不生成getter方法
readwrite 既生成getter 又生成setter方法(默认)
@property (readonly) int age
指定所生成的方法的方法名称
getter=你定制的getter方法名称
setter=你定义的setter方法名称(注意setter方法必须要有 :)
@property (getter=isMarried) BOOL married;
说明,通常BOOL类型的属性的getter方法要以is开头
1.相同类型的property修饰符不能同时使用
2.不同类型的property修饰符可以多个结合在一起使用, 多个之间用,号隔开
3.iOS开发中只要写上property, 那么就立刻写上nonatomic
readonly: 只会生成getter方法
readwrite: 既会生成getter也会生成setter, 默认什么都不写就是readwrite
getter: 可以给生成的getter方法起一个名称
setter: 可以给生成的setter方法起一个名称
retain: 就会自动帮我们生成getter/setter方法内存管理的代码
assign: 不会帮我们生成set方法内存管理的代码, 仅仅只会生成普通的getter/setter方法, 默认什么都不写就是assign
多线程
atomic :性能低(默认)
nonatomic :性能高
在iOS开发中99.99%都是写nonatomic