@property参数
2015-09-22 00:25
218 查看
@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.
. 自动生成私有属性.
. 自动生成私有属性的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.
相关文章推荐
- Linuxshell脚本之if条件判断
- 为什么有了post那么多优点,还有还多网站用get,比如百度搜索
- doGet()和doPost()各自的功能以及它们的关系
- [9-13]Shell系列5――条件测试和运算符
- Centos7 防火墙配置
- 安装Nginx
- 网站内部优化--如6何做好网址的优化
- 浅析一个中小企业制作网站的建站技巧
- 关于发布到tomcat的项目里的图片消失问题
- linux的运行级别
- linux sudo 命令
- dig---优秀域名故障排查工具
- linux下MMC/SD/SDIO驱动系列之一 ---- 概述
- Centos解决Apache配置虚拟主机问题。Apache欢迎页可以打开,但是网站目录定位不上
- 使用shell统计字符串出现的次数,并从大到小进行排序显示
- 企业如何选择Hadoop
- linux下的加密解密学习
- linux c 字符串处理API
- Activity启动模式图文详解:standard, singleTop, singleTask 以及 singleInstance
- Linux下QT中执行shell命令