IOS学习—@property的解析

来源:互联网 发布:sql 几种树形结构 编辑:程序博客网 时间:2024/06/05 07:28

根据Objective-C官方文档中的Property说明,@property中的声明分类为以下几种:

1、声明属性的访问方法

  • getter = getterName
  • setter = setterName

声明访问属性的设置与获取方法名。

2、声明属性写操作权限:

  • readwrite
  声明此属性为读写属性,即可以访问设置方法(setter),也可以访问获取方法(getter) ,与readonly互斥。
  • readonly
声明此属性为只读属性,只能访问此属性对应的获取方法(setter),与readwrite互斥。

3、声明写方法的实现

  • assign

声明在setter方法中,采用直接赋值来实现设值操作。如:

<span style="font-size: 14px;">-(void)setName:(NSString*)_name{     name = _name;}</span>

不做任何内存管理(默认,用于非OC对象)。
  • retain

声明在setter方法中,采用对设过来的retain加1操作。如:

<span style="font-size:14px;">-(void)setName:(NSString*)_name{     //首先判断是否与旧对象一致,如果不一致进行赋值。     //因为如果是一个对象的话,进行if内的代码会造成一个极端的情况:当此name的retain为1时,使此次的set操作让实例name提前释放,而达不到赋值目的。     if ( name != _name){          [name release];          name = [_name retain];     }}</span>
release旧值,retain新值(用于OC对象)。
  • copy

调用此实例的copy方法,设置克隆后的对象。

release旧值,copy新值(一般用于NSString *)。

该参数一般用于NSObject类及其子类的对象,这些对象在赋值时实现深拷贝,即属性name指向的对象是赋值给它的对象的副本。

4、访问方法的原子性

  • nonatomic
代表对属性赋值的时候不加锁,即在多线程环境下访问可能会出现数据错误。
  • atomic
如果需要在多线程环境下运行,为保证数据不会出现错误,可使用atomic参数,它会对属性赋值的时候加锁。


0 0
原创粉丝点击