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,非原子访问,不加同步,多线程并发访问会提高性能。默认加锁,加到所属实例级。