北京总部

Objective-C知识点——property属性

作者: 来源: 时间: 2017-03-08 15:33:56

Objective-C中的@property关键字及其用法

1)        定义:

property是用来捕获对象的状态。它们反射出对象的内在属性以及和其他对象的关系。它提供了一个安全的、便捷的方法,以便我们访问对象的属性,而不需要写出各种访问方法(getter、setter)。

使用@property关键字有以下几点好处:

自动的实现getter和seeter方法:当你声明了property时,会自动的实现getter和setter方法而不用自己写出来。

使用该关键字使得目的非常明确,就是用来进行数据封装并提供访问接口的。

property关键字可以通过一系列附加信息,来方便的约束属性的行为。比如提供了各种附加声明如assign、copy、weak、strong、atomic、nonatomic等。

2)        @property附加声明的作用,见下述说明:

@property与@synthesize是成对出现的,可以自动生成某个类成员变量的存取方法。在Xcode4.5以及以后的版本,@synthesize可以省略。

附加属性的约束:

①atomic与nonatomic

atomic:默认是有该属性的,这个属性是为了保证程序在多线程情况,编译器会自动生成一些互斥加锁代码,避免该变量的读写不同步问题。

nonatomic:如果该对象无需考虑多线程的情况,请加入这个属性,这样会让编译器少生成一些互斥加锁代码,可以提高效率。

②readwrite与readonly

readwrite:这个属性是默认的情况,会自动为你生成存取器。

readonly:只生成getter不会有setter方法。

readwrite、readonly这两个属性的真正价值,不是提供成员变量访问接口,而是控制成员变量的访问权限。

③strong与weak

strong:强引用,也是我们通常说的引用,其存亡直接决定了所指向对象的存亡。如果不存在指向一个对象的引用,并且此对象不再显示在列表中,则此对象会被从内存中释放。

weak:弱引用,不决定对象的存亡。即使一个对象被持有无数个弱引用,只要没有强引用指向它,那么还是会被清除。

strong与retain功能相似;weak与assign相似,只是当对象消失后weak会自动把指针变为nil;

④assign、copy、retain

assign:默认类型,setter方法直接赋值,不进行任何retain操作,不改变引用计数。一般用来处理基本数据类型。

retain:释放旧的对象(release),将旧对象的值赋给新对象,再令新对象引用计数为1。我理解为指针的拷贝,拷贝一份原来的指针,释放原来指针指向的对象的内容,再令指针指向新的对象内容。

copy:与retain处理流程一样,先对旧值release,再copy出新的对象,retainCount为1.为了减少对上下文的依赖而引入的机 制。我理解为内容的拷贝,向内存申请一块空间,把原来的对象内容赋给它,令其引用计数为1。对copy属性要特别注意:被定义有copy属性的对象必须要 符合NSCopying协议,必须实现-(id)copyWithZone:(NSZone *)zone方法。

也可以直接使用:

使用assign: 对基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double,char, 等等)

使用copy: 对NSString

使用retain: 对其他NSObject和其子类

成就年薪百万程序员就到中软国际教育

相关阅读

更多

中软卓越java培训地址:北京市海淀区科学院南路2号融科资讯中心C座北楼12层 联系电话:400-666-3775 邮箱账号:etc-marketing@chinasofti.com

©2008-2016 北京中软国际教育科技股份有限公司 京ICP备14058756号-2