Objective-C中类属性的 copy, tetain, assign , readonly , readwrite, nonatomic区别
区别:
1.nonatomic:多线程并发访问会提高性能,多线程在并发的时候不需要考虑顺序先后执行,大大的提高性能。默认是atomic(注意:)atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所 以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。
2.assign: 简单赋值,不变引用计数 (assign相当于ARC下的weak)
对基础数据类型 (例如NSInteger)和C数据类型(int, float, double, char, 等) 适用简单数据类型或对指针的弱引用
3.copy:引用计数加1,一般是应用字符串(特别是在oc对象修饰符中特别使用copy修饰符,其他oc对象用strong)
4.retain:引用计数加1,主要应用于oc对象类型,(retain相当于ARC下的strong)
例子:
1.@property (nonatomic, assign) int number;
2.@property (nonatomic, copy) NSString * myString;
3. @property (nonatomic, retain) UIView * myView;
总结:
1.oc对象---NSString用copy
2.oc对象--其他对象用strong
2.UI控件--用weak
笔记1:
1.谁alloc+1、谁release
2.retain+1、release
3.new+1、release
4.copy+1、release
5.autoreleasepool、release
笔记2:
1.ARC:automatic reference Counting:自动引用计数
2.在对象被销毁之前,会调用该方法:ARC下,不需要【super
dealloc】,在非ARC下,该方法中必须有这行代码:[super
dealloc]
3.计数减1!=释放内存
4.copy和retain区别:
1.retain对属性的作用:release旧值,retain新值,主要用于oc对象
2.copy对属性的作用:release旧值,copy新值,主要用
于oc对象的字符串NSString
3.assign对属性的作用:直接赋值,默认为assign,主要用于非oc对象
1.copy是拷贝一份新的对象;是内容或者地址copy
2.retain是同一个对象只是计数加1,是指针copy
笔记3:
1.在ARC下使用autoreleasepool用法:
@autoreleasepool
{
代码块......;
}
2.在非ARC下:retain和strong没有区别
在ARC下,都是使用strong,字符串用copy
3.ARC工作原理:自动引用计数,只要没有强指针指向对象,则该对象就会被释放
强指针:默认情况下,所有指针都是强指针,__strong修饰
弱指针:__weak修饰的指针都是弱指针,特点是:只要弱指针指
向的对象被释放,则弱指针会自动被置为nil.