property 和 synthesize

在程序开发时,有时候我们需要获取一些属性的值或者对属性赋值,往往需要定义一些属性的 getter 和 setter 方法。

在 Objective-C 中,提供了一些机制可以让编译器自动为程序代码生成属性的 gettersetter 方法。

"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 方法名称。


如需转载,请说明博文出处。谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值