首页 > 代码库 > OC属性property

OC属性property

声明property语法为@property(参数1,参数2,参数3)类型 名字;

例如:@property assignint age

相当于定义了下面俩个方法:

- (int) age;

- (void) setAge:(int)newAge;

在实现文件.m中我们只要添加如下一行代码:

@systhesize age

就相当于实现了.h文件中的getset方法。

 

属性关键字:

@property后面的()内可以配置一些参数,下面给出可配置的参数:

1、读写属性:即控制了属性是否存在设置器的方法。这些参数之间是互斥的。

Readwrite(默认):表明属性是可读写的。

Readonly:只读。

2、setter语意:

Assign(默认):一般用来处理基础类型,默认的。

Copy:指定应该使用对象的副本,前一个值发送一条release消息。基本上像retain,但是没有增加引用计数,是分配一块新的内存来放置它。在进行设置的时候,使用copy来复制参数,对原值进行release

推荐做法:NSStringcopydelegateassign(一定要用assign),其他对象类型用retain,基本数据类型用assign(默认的)。

3、原子性控制:

Atomic(默认):为了保证多线程情况下编译器会自动生成一些互斥加锁代码,避免该变量的读写不同步。

Nonatomic:不提供对多线程的保护,如果该对象无需考虑多线程情况。

推荐:一般都可以使用nonatomic参数。

4strongweak

Strongweakios5中由ARC(自动内存管理机制)引入的新的对象变量属性。

Strong:用来修饰引用的属性。

@property(strong) Myclass *myobject;

相当于

@property(retain) Myclass *myobject;

Weak:用来修饰弱引用的属性,当弱引用的对象被释放后,该对象将被自动赋予nil值。

@property(weak) Myotherclass *delegate;

相当于

@property(assign) Myotherclass *delegate;

强引用和弱引用的区别在于:强引用也就是我们通常所讲的引用,其存亡直接决定了所指对象的存亡。如果不存在指向一个对象的引用,并且此对象不再显示于列表中,则此对象会被从内存中释放。弱引用除了不决定对象的存亡外,其他与强引用相同。

OC属性property