您的位置:首页 > 移动开发 > IOS开发

IOS语法 @property里的assign,copy,retain的区别

2014-04-20 17:20 405 查看
@property(nonatomic,copy)NSString* str;

这里的assign copy retain的区别:

assign:这个是简单赋值,不更改引用索引计数(reference counting);

copy:建立索引计数为一的对象,然后释放旧对象;

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

-retain的实际语法:

-(void)setName(NSString*)newName

{

if(name!=newName)

{

[name release];

name=[newName retain];

name的引用计数has been bumped up by 1;

}

}

assign :是对oc基础数据类型(CGRect,CGPoint)和C数据类型(float int);

copy:是对字符串NSString;

retain:是对其他NSObject 和其子类;

atomic是oc使用的一种线程保护技术,是为了防止在写未完成的时候被其他线程读取,造成数据错误,而这种机制是很耗资源的,在iphone这小型设备上如果没有使用多线程之间的通讯,那么使用nonatomic是一个非常好的选择

注:

oc的内存管理,第一:retain copy都是在手动内存管理中,赋值oc对象常用的防止内存泄露的方法,当A 要赋值给B时,A完成赋值操作后,将自己release,而B则将自己原持有的对象地址release,并持有A的对象及引用计数,这样就保证两个数据块的引用计数始终为1或0,程序中最后一位引用者release时,才能保证这块内存被很好的释放;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: