@property(nonatomic,copy)NSString* str;多线程
这里的assign copy retain的区别:iphone
assign:这个是简单赋值,不更改引用索引计数(reference counting);atom
copy:创建索引计数为一的对象,而后释放旧对象;线程
retain:释放旧对象,将旧对象的值赋予输入对象,再提升输入对象的引用索引计数;对象
-retain的实际语法:
索引
-(void)setName(NSString*)newNameip
{内存
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时,才能保证这块内存被很好的释放;