property:属性
synthesize:合成
@property:
功能:让编译器自动编写一个与数据成员同名的方法声明来省去读写方法的声明。
格式:声明property的语法为:@property (参数1,参数2,参数3) 类型 名字;如:
其中参数主要分为三类:
3.读写属性: (readwrite/readonly)
2.setter语意:(assign/retain/copy)
1.原子性: (atomicity/nonatomic)
各参数意义如下:
readwrite: 产生setter\getter方法
readonly: 只产生简单的getter,没有setter。
assign: 默认类型,setter方法直接赋值,而不进行retain操作
retain: setter方法对参数进行release旧值,再retain新值。保留对象,内部会自动调用retain方法,引用计数+1
copy: setter方法进行Copy操作,与retain一样
nonatomic: 禁止多线程,变量保护,提高性能,非原子性访问,原子性访问atomic多线程同时访问时,保证访问方法只被一个线程访问。如果使用多线程,有时会出现两个线程互相等待对方导致锁死的情况(具体可以搜下线程方面的注意事项去了解)。在没有(nonatomic)的情况下,即默认(atomic),会防止这种线程互斥出现,但是会消耗一定的资源。
@synthesize
有时候我们不想定义属性为_开头的,这时候我们就可以使用@synthesize,来修改我们想要的属性名
- //这时候属性_userName变成了$userName
- @implementation User
- @synthesize userName = $userName;