property 和 synthesize解说

这两个的标识的用法,要从setter和getter说起


一般,我们的程序都会有一个setter和getter来获取某个类的成员变量,object c 默认所有成员变量是私有的,所以利用setter和getter来解决这个问题,例如如下的C++语言

Class A{
private:
     int i;
public:
     int getI();
     void setI(int i);
};

里面 getI()和setI()就是一对。


1.现在在.h文件中声明一个property

@property int count;

相当于在.h文件中声明了两个方法

-(int)count;
-(void) setCount:(int)count;


2.实现文件.m中
@synthesize count;
等效实现了上面两个方法

其中参数主要分为三类:

 

读写属性: (readwrite/readonly)

setter语意:(assign/retain/copy)

原子性: (atomicity/nonatomic)

 

各参数意义如下:

 

readwrite: 产生setter\getter方法

readonly: 只产生简单的getter,没有setter。

assign: 默认类型,setter方法直接赋值,而不进行retain操作

retain: setter方法对参数进行release旧值,再retain新值。

copy: setter方法进行Copy操作,与retain一样

nonatomic: 禁止多线程,变量保护,提高性能

 


strong

该属性值对应 __strong 关键字,即该属性所声明的变量将成为对象的持有者。

weak

该属性对应 __weak 关键字,与 __weak 定义的变量一致,该属性所声明的变量将没有对象的所有权,并且当对象被破弃之后,对象将被自动赋值nil。

并且,delegate 和 Outlet 应该用 weak 属性来声明。同时,如上一回介绍的 iOS 5 之前的版本是没有 __weak 关键字的,所以 weak 属性是不能使用的。这种情况我们使用 unsafe_unretained。

unsafe_unretained

等效于__unsafe_unretaind关键字声明的变量;像上面说明的,iOS 5之前的系统用该属性代替 weak 来使用。

copy

与 strong 的区别是声明变量是拷贝对象的持有者。

assign

一般Scalar Varible用该属性声明,比如,int, BOOL。

retain

该属性与 strong 一致;只是可读性更强一些。





posted @ 2014-06-22 10:53  _Roy  阅读(191)  评论(0编辑  收藏  举报