Objective-C中的property介绍 (合成存取方法)
来源:互联网 发布:减肥后期越来越难 知乎 编辑:程序博客网 时间:2024/05/22 06:38
从Objective-C 2.0版本开始,它自动合成了成员变量的setter方法和getter方法,这样开发人员就可以避免书写乏味的setter,getter方法了。
让系统自动合成setter和getter方法只要如下两步:
(1)在类接口部分使用@property指令定义属性。使用@property定义属性时无须放在类接口部分的花括号里,而是直接放在@interface,@end之间定义。@property指令放在属性定义的最前面。
(2)此步是可选的。如果程序需要改变getter,setter方法对应的成员变量的变量名,则可以在类实现部分使用@synthesize指令。
当采用上述两个步骤合成存取方法之后,不仅会合成成对的setter和getter方法,还会自动在类实现部分增加一个成员变量,该成员变量的变量名为getter方法名加下划线前缀。
PS:如果为某个类定义了一个成员变量,并提供了相应的setter,getter方法,那么可称为定义了一个属性(property)。
可以在@property和类型之间用括号添加一些额外的指示符,可使用的特殊指示符如下:
(1)assign:该指示符指定对属性只是进行简单赋值,不更改对所赋的值的引用计数。这个指示符主要适用于NSInteger等基本类型,以及short,float,double,结构体等各种C数据类型。
(2)atomic(nonatomic):指定合成的存取方法是否为原子操作。所谓原子操作,主要指是否线性安全。如果使用atomic,那么合成的存取方法都是线程安全的—当一个线程进入存取方法的方法体之后,其他线程无法进入该存取方法,这样就可以避免多线程并发破坏对象的数据完整性,atomic是默认值。虽然atomic可以保证对象数据的完整性,但是atomic得线程安全会造成性能下降,因此,在大多数单线程环境下,都会考虑使用nonatomic来提高存取方法的访问性能。
(3)copy:如果使用copy指示符,那么当调用setter方法对成员变量赋值时,会将被赋值的对象复制一个副本,再将副本赋值给成员变量。
(4)getter,setter:这两个指示符用于为合成的getter,setter方法指定自定义方法名。
(5)readonly,readwrite:readonly指示系统合成getter方法,不再合成setter方法;readwrite是默认值,指示系统需要合成setter和getter方法。
(6)retain:使用retain指示符定义属性时,当某个对象赋值给该属性时,该属性原来所引用的对象的引用计数减1,被赋值对象的引用计数加1.
PS:在未启动ARC机制的情况下,retain是一个很有用的指示符:当一个对象的引用计数大于1时,该对象不应该被收回,但启用ARC机制后,一般就较少使用retain指示符了。(ARC机制是默认开启的)
(7)strong,weak:strong指示符指定该属性对被赋值对象有强引用,而weak指示符指定该属性对被赋值对象持有弱引用。强引用的意思是:只要该强引用指向被赋值的对象,那么该对象就不会自动回收;弱引用的意思是:即使该弱引用指向被赋值的对象,该对象也可能被收回。
(8)unsafe_unretain:这个指示符与weak指示符基本相似,对于被unsafe_unretain指针所指向的对象,该对象也可能被回收。
PS:在启动ARC机制时,使用strong,weak指示符将十分方便。如果程序不希望被该属性引用的对象被回收,那就应该使用strong指示符。
- Objective-C中的property介绍 (合成存取方法)
- Objective-C 合成存取器方法
- Objective-C类-Objective-C 合成存取器方法
- 014.@property 合成存取方法
- 014.@property 合成存取方法
- 合成存取方法 @property @synthesize
- Objective-C中的存取方法
- Objective-C ——合成存取器
- Objective-C 基础:Time5 合成存取器
- objective-c(六)文件分离,合成存取方法,方法多参数,局部变量,self使用
- Objective-C中的@property
- Objective-C中的@property
- Objective-C中的@property
- Objective-C中的@property
- Objective-C中的@property
- Objective-c中的@property 简单介绍与使用
- 【IOS 开发学习总结-OC-12】★objective-c面向对象之——合成存取方法与点语法
- 谈Objective-C中的property
- 用java实现文件下载,提示java.lang.IllegalStateException: getOutputStream() has already been called for this re
- android 防止按钮连续点击的方法(Button,ImageButton等)
- Linuxs 学习框架
- django 使用全局搜索功能
- buntu忘记mysql root密码重置
- Objective-C中的property介绍 (合成存取方法)
- Java的Integer.valueOf()初窥
- Educational Codeforces Round 24
- mybatis+oracle实现批量添加
- 离散优化初步
- web基础知识
- getter和setter方法
- django中使用邮箱进行登陆
- 照片