@property

来源:互联网 发布:苏卅网络电视李刚評話 编辑:程序博客网 时间:2024/06/05 10:57

1 assign:为基本数据类型准备的

2 copy:建立一个索引计数为1的对象,然后释放旧对象,Copy其实是建立了一个相同的对象

3 retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1



retain和copy区别:

比如一个NSString对象,地址为0x1111,内容为@“STR”;

Copy到另外一个NSString之后,地址0x222,内容相同;

retain到另外一个NSString之后,地址相同(建立一个指针,指针拷贝),内容当然相同,也就是说,

retain是指针拷贝,copy是内容拷贝



常在声明一些成员变量时会看到如下声明方法:

@property(参数1,参数2) 类型 名字;

这里我们主要分析在括号中放入的参数,主要有以下三种:

setter/getter方法(assign/retain/copy)

读写属性(readwrite/readonly)

atomicity(nonatomic)

其中各参数说明如下:

assign

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

retain

setter 方法对参数进行release旧值,再retain新值,如下代码:

-(void)setObject:(ClassX*)value

{

   if(obj!=value)

{

   [obj release];

   obj=[value retain];

   }

}

copy方法

-(void)setObj:(ClassX*)value

{

        if(obj!=value)

      {

         [obj release];

         obj=[value copy];

      }

}

assign:

-(void)setObj:(ClassX*)value

{

     

         obj=value;

     

}



@property是一个属性访问声明,括号内支持一下几个属性

1 getter=getterName.setter=setterName

2 readwrite,readonly,设置可访问级别

3 assign,setter方法直接赋值

4 retain  

5 copy,

6 nonatomic,非原子访问,不加同步,多线程并发访问会提高性能。默认加锁,加到所属实例级。




0 0