@property的作用
- . 自动生成私有属性.
- . 自动生成私有属性的getter setter方法的声明.
. 自动生成私有属性的getter setter方法的实现.
- 生成的setter实现: 都是直接赋值.
. @property参数.
. 可以带参数.
. @property(参数1,参数2,参数3….) 数据类型 名称;
. @property参数主要分为如下四类.
. 与多线程相关的.
atomic nonatomic. 与生成的setter方法实现相关的
assign retain. 生成的getter setter 是可读写的还是只读的封装.
readwrite readonly. 修改生成的getter setter方法的名称
- setter getter
. 与多线程相关的参数
默认值是atomic 如果不写这两个参数中的1个 那么默认就是atomic。
atomic: 生成的set方法的实现就是加了线程安全锁的.
- 安全性高. 但是效率相对较低.
nonatomic:生成的set方法的实现没有加线程安全锁.
- 安全性低 但是效率相对较高
推荐使用nonatomic 因为这样效率更高一些.
. 与生成的setter方法的实现相关的参数
默认值是assign
assign: 生成的setter方法的实现就是直接赋值.
retain: 生成的setter方法的实现就是标准的MRC内存管理代码.
属性的类型是OC对象的时候 就使用retain
- 属性的类型是非OC对象的时候 就使用assign
生成的是只读封装还是读写封装
默认值是: readwrite
readwrite: 同时生成属性的getter和setter
- readonly: 只生成getter 而不生成setter
修改生成的getter setter方法的名称
默认情况下,@propert生成的getter setter方法的名称都是按照规范来生成的.
使用参数getter或者setter可以修改生成的getter方法和setter方法的名称.
虽然可以使用参数来更改生成的getter、setter方法的名称但是没事别乱改.
- 因为这样的话 方法名就不遵守规范了.
注意的问题
- . 如果我们使用getter setter参数修改了生成的getter setter方法名称.
- 点语法仍然可以正常使用.
会自动的将点语法转换为调用修改名称以后的方法.
. setter方法的名称永远都不要改.
. 当属性的类型是1个BOOL类类型的时候.
- 为了让我们的代码语义看起来更符合人类的思维.
- 所以我们修改这个属性的getter名称 以isXXX开头.
. 使用大注意.
- retain只是生成的set方法是标准的MRC内存管理代码.
- 不会在dealloc中生成release
- 所以,我们还要手动的在dealloc中写上release的代码.
. 参数使用总结
. 同1组的参数只能使用其中的1个.否则就会冲突.
- 但是getter和setter可以同时使用 这个不冲突.
. 使用建议.
- . 无论如何使用nonatomic
- . 如果属性的类型是OC对象类型使用retain 如果属性类型是非OC类型使用assign
- . 如果希望可读可写 就使用readwrite 如果希望只读 就使用readonly
- . 无论如何不要去修改setter的名称 只有在属性的类型是BOOL类型的时候才去修改getter的名称为isXXX.