Objective-C @property学习总结3 完结
来源:互联网 发布:程序员专业术语 编辑:程序博客网 时间:2024/05/09 20:28
attribute有如下几种取值,各个attribute的含义涉及到Objective-C中内存管理的相关知识,所以这里只是简单的介绍
- 读写属性: (readwrite/readonly) 决定是否生成set访问器
- setter语意 (assign/retain/copy)set访问器的语义,决定以何种方式对数据成员赋予新值。
- 原子性: (atomic/nonatomic)
readwrite: 系统会生成setter/getter方法
readonly: 系统只生成getter方法.
此标记说明属性是只读的,如果你指定了readonly,在@implementation中只需要一个getter。或者如果你使用@synthesize关键字,也只会生成getter方法。如果你试图为属性赋值,你将得到一个编译错误。readonly关键字代表setter不会被生成, 所以它不可以和 copy/retain/assign组合使用。
assign: 简单赋值,不更改索引计数
此标记说明设置器直接进行赋值,这也是默认值。在使用ARC的应用程序中,如果你要一个属性使用assign,且这个类符合NSCopying协议,你就要明确指出这个标记,而不是简单地使用默认值,否则的话,你将得到一个编译警告。这再次向编译器说明你确实需要赋值,即使它是可拷贝的。
retain: 释放旧的对象,将旧对象的值赋予输入对象,再增加输入对象的索引计数为1
指定retain会在赋值时唤醒传入值的retain消息。此属性只能用于Objective-C对象类型,而不能用于Core Foundation对象。(原因很明显,retain会增加对象的引用计数,而基本数据类型或者Core Foundation对象都没有引用计数)。
copy: 建立一个索引计数为1的对象,然后释放旧对象
它指出,在赋值时使用传入值的一份拷贝。拷贝工作由copy方法执行,此属性只对那些实行了NSCopying协议的对象类型有效。
atomic/nonatomic:
指出访问器不是原子操作,atomic表示属性是原子的,支持多线程并发访问,而默认地nonatomic,访问器是原子操作。这也就是说,在多线程环境下,解析的访问器提供一个对属性的安全访问,从获取器得到的返回值或者通过设置器设置的值可以一次完成,即便是别的线程也正在对其进行访问。如果你不指定nonatomic,在自己管理内存的环境中,解析的访问器保留并自动释放返回的值,如果指定了nonatomic,那么访问器只是简单地返回这个值。没有特别的多线程要求建议用 nonatomic 有助于提高性能。
在iOS5引入了自动引用计算(ARC)之后,对象变量属性新增了strong和weak,strong与retain作用类似,可以说是用来代替retain。
- Objective-C @property学习总结3 完结
- Objective-C @property学习总结1
- Objective-C @property学习总结2
- property 学习[Objective C]
- 【Objective-C学习-3】@property和@synthesize
- Objective-C 的property学习
- Objective-C - @property的参数总结
- Objective-C学习笔记 @property 参数说明
- Objective-C 学习笔记 08 - Property List
- Objective-C 学习笔记 11 - 属性Property
- 【Objective-C学习-5】@property参数详解
- iOS学习 - Objective-c之property
- iOS学习 - Objective-c之property
- 《Objective-C学习总结》
- 【Objective-C】ARC指南3 - @property
- objective-c property
- objective-c property
- Objective-C 2.0 @property
- iOS开发技巧(系列十三:UIRefreshControl下拉刷新)
- Linux系统crontab 定时任务 补充
- javascript 类,只读属性,闭包
- js 字符串 replace replaceAll
- Java学习笔记(60)----------8张图理解Java
- Objective-C @property学习总结3 完结
- 聊聊并发(八)——Fork/Join框架介绍
- 3.1等待/通知机制(wait/notify)
- java中方法的动态绑定
- word去掉页眉或页脚的横线
- 用sql脚本建立Mysql数据库及表
- 利用Javascript来创建Ubuntu Scope
- HTML disabled属性的启用和禁止
- 只在第n页插入页眉或页脚