在程序开发时,有时候我们需要获取一些属性的值或者对属性赋值,往往需要定义一些属性的 getter 和 setter 方法。
在 Objective-C 中,提供了一些机制可以让编译器自动为程序代码生成属性的 getter 和 setter 方法。
"property" 关键字,表示对 ’属性‘ 的 getter 和 setter 方法的声明。
"synthesize" 关键字,表示对 ’属性‘ 的 getter 和 setter 方法的实现。
如
@property Student stu;
其编译器内部相当于生成如下代码:
// 声明 setter 方法
-(void)setStu:(Student *)newStu;
// 声明 getter 方法
-(Student *)stu;
@synthesize stu;
其编译器内部相当于生成如下代码:
// 实现 setter 方法
-(void)setStu:(Student *)newStu
{
[_stu release];
_stu = [newStu retain];
}
// 实现 getter 方法
-(Student *)stu
{
return _stu;
}
(注意: Objective-C 中 getter 方法默认给属性名一直,而不是 getStu 。)
property 参数说明:
语法:@property (参数1, 参数2) 类型 属性名称;
参数主要分三类:
* 读写属性: readwrite / readonly
* setter处理: assign / retain / copy
* 原子性: atomic / nonatomic
(默认值)
readwrite:同时生成 getter 和 setter 方法的声明。
readonly:只生成 getter 方法的声明(对外只可访问,不可修改)。
assign:setter 方法中直接赋值。
retain:setter 方法中先 ‘release’ 旧值,再 ‘retain’ 新值,以防止内存泄露的问题发生。
copy:setter 方法中先 ‘release’ 旧值,再 ‘copy’ 新值。
(建议:NSString 一般用 copy 策略,其他对象一般用 retain 策略,基本数据类型以及 UI 视图元素 UI××× 的对象一般用assign策略。)
atomic:提供线程安全(即可以允许多个线程同时访问属性,代表给 setter 和 getter 进行加锁,以保证线程安全)。此机制会消耗系统资源。
nonatomic:禁止多线程访问,变量保护,提高性能。(建议:如果没有使用多线程间的通信编程,最好使用此机制,以降低系统资源消耗。)
getter:指定 getter 方法名称。
setter:指定 setter 方法名称。
如需转载,请说明博文出处。谢谢!