property参数讲解
一、property作用:
1、自动生成私有属性
2、自动生成这个属性的getter和setter方法的声明;
3、自动生成这个属性的getter和setter方法的实现;
注意:生成的setter方法的实现中,无论是什么类型,都是直接赋值
二、property参数:
1、property是可以带参数的 @property(参数一,参数二...);
2、property四组参数;
(1)与多线程c相关的两个参数。
atomic、nonatomic
atomic:默认值,如果写atomic,这个时候生成的setter方法的代码就会加上一把安全锁
特点:安全,效率较低
nonatomic:这个时候生成的setter方法的代码就不会加安全锁,效率高
特点:不安全,效率高
(2)与生成setter方法实现相关的参数。
assign、retain
assign:默认值,生成的setter方法的实现就是直接赋值;
retain:生成的setter方法的实现 就是标准的MRC内存管理代码,
也就是,先判断新旧对象是否为同一个对象;
如果不是就release,如果是就使用 ratain
当属性的类型是OC对象类型的时候,就使用retain;
当属性的类型是非OC对象类型的时候,就使用assign;
注意:
retain参数,只是生成标准的setter方法为标准的MRC内存管理代码,不会自动的在dealloc中生成relase的代码
所以,还要我们自己手动的在dealloc中release;
(3)与生成只读、读写相关的参数
readonyly.readwriter
readwriter:默认值,同时生成getter setter方法
readonly:只会生成getter不会生成seeter方法
(4)与生成的getter setter方法名字相关的参数
getter setter
默认情况下:@propterty生成的getter和setter方法是最标准的
其实可以通过参数来制定@property生成的方法名
getter=ageGet用来指定get方法的名字
setter=ageSet:用来指定set方法的名字,后面必须加:冒号;
如果使用getter setter修改了生成f方法的名字。
如果在使用点语法的时候,编译器转化为修改后的名字的代码
使用场景:如果使用Boolear的时候,未了增加代码的可读性,可以加上is开头
总结:
1.与多线程相关的参数用nonatomic 默认natomic
2.于生成的setter方法相关的参数, 默认assign;
属性的类型是OC对象 使用 retain
属性的类型是非OC对象 使用assign
retain参数,只是生成标准的setter方法为标准的MRC内存管理代码,不会自动的在dealloc中生成relase的代码
所以,还要我们自己手动的在dealloc中release;
3.只读,读写
如果希望生成的封装是只读封装使用readonly
如果希望读写封装,使用readwriter; 默认值
4.无论什么情况都不要改setter
如果使用Boolear的时候,未了增加代码的可读性,可以加上is开头
总结:
属性的类型是OC对象 使用 retain(默认)
属性的类型是非OC对象 使用assign
UI控件使用UIImageView (weak)
字符串NSString用: (copy)
BOOL用:@property(nonatomic,assign,getter=isVip) BOOL vip;
NSIntager等非OC用:@property(nonatomic,assign) NSIntager number;
NSArray和模型Bean 用(strong)