内存管理,readwrite,readonly,assign,retain,copy,nonatomic,的作用以及深浅拷贝
来源:互联网 发布:mac如何打人民币符号 编辑:程序博客网 时间:2024/05/17 22:46
1.内存管理机制
当一个实例alloc以后,其引用计数器自动+1,在它引用到其他对象,或者超出作用域的时候,会自动减去1,此情况为ARC的情况,若MRC,需要手动retain和release,或者创建自动释放池来进行内存管理.
2.readwrite,readonly,assign,retain,copy,nonatomic的区别
readwrite:可读可写,默认属性,系统会生成setter和getter方法
readonly:可读,不可写,系统指挥生成getter方法,只可读取,不可赋值改动
assign:仅用在设置变量,是赋值特性,不进行retain操作,一般数据类型用它
retain: 计数器会+1,指针改变后,setter方法会relase对象然后retain新对象,新对象计数器+1,
copy:和retain类似,但是有区别,例如申明一个copy类型的对象A,初始A=B,实际上A产生了一个新的对象,计数器为1,具体见下文copy和retain的区别
nonatomic:非原子性访问,不加同步,多线程的时候可以提高性能,个人理解为因为非原子性,所以系统不用做额外的工作来保证线程安全,所以性能会高.如果是原子性, 所以不加nonatomic 线程则会相对安全.
3.copy和retain的区别
retain在IOS中常用,它只会进行引用计数器加1,后期操作对应release即可,arc则一般不用管计数器的操作,而copy则会创建一个新的对象的指针,会重新产生copy出来对象的引用计数器值.新的对象遵守协议后,在- (id)copyWithZone:(NSZone *)zone方法里,所有属性都相同.简单来说,model2对象copy了model1对象以后,各自本身的引用计数器是分开的,但是各自的属性却是指向相同指针,公用着引用计数器.或许有人会问,那么如果model1对象销毁后,model2还在,那岂不是model1的属性也还在?(model1都没了,它的属性还能在?你tm逗我呢?)
没错!确实就是还在,model2还用着!你model1确实是销毁了,但是它的属性销毁不销毁和它本身没有任何关系,而是和它属性的引用计数器有关系,说白了,因为model2的存在,mode1的属性的计数器在model1销毁的时候,还是不为0的.
从理论上讲例如:moedel2是copy的model1得来,model1销毁之前,你用一个变量接收过一次这个属性(其实你也可以理解为接受的是model2的这个属性),那么,在model1销毁后,你会发现,这个变量是有内存的,说白了,就是model2在用着.
属性为copy的属性,一般需要遵守协议并重写- (id)copyWithZone:(NSZone *)zone
4.深浅复制的区别:潜复制只复制指向对象的指针,而不复制对象本身,深复制则引用对象本身,简单来说,浅复制会根据对象的改变而改变,而深复制则完全重新分配了空间和指针,是两个独立的个体,只是刚开始的时候值相同
0 0
- 内存管理,readwrite,readonly,assign,retain,copy,nonatomic,的作用以及深浅拷贝
- readwrite,readonly,assign,retain,copy,nonatomic属性的作用
- readwrite,readonly,assign,retain,copy,nonatomic 属性的作用
- readwrite、readonly、retain、copy、assign、nonatomic的作用以及使用场景
- readwrite, readonly, assign, retain, copy, nonatomic属性的作用? 什么情况使用copy,assign和retain?
- 属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用
- assign, retain, copy, readonly,readwrite,atomic, nonatomic
- 属性readwrite,readonly,assign,retain,copy,nonatomic
- assign, retain, copy, readonly,readwrite,atomic, nonatomic
- 属性readwrite,readonly,assign,retain,copy,nonatomic
- copy、retain、assign、readonly、readwrite、nonatomic、weak、strong的区别
- IOS属性(@property)的修饰词assign、weak、strong、retain、copy、nonatomic、atomic、readonly、readwrite解释、以及一部分内存优化方法
- 属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那种情况下用?
- 属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那种情况下用
- 属性readwrite,readonly,assign,retain,copy,nonatomic各是什么作用,在哪种情况下用?
- copy, retain, assign , readonly , readwrite, nonatomic、@synthesize、@property、@dynamic
- copy, retain, assign , readonly , readwrite, nonatomic、@synthesize、@property、@dynamic
- copy, retain, assign , readonly , readwrite,strong,weak,nonatomic整理
- VBScript之Eval函数与Execute语句(Array.ForEach的实现)
- Extjs学习笔记——Ext自定义类
- Java事件机制
- WebKit之IDL的binding
- WebKit之WebSocket
- 内存管理,readwrite,readonly,assign,retain,copy,nonatomic,的作用以及深浅拷贝
- Python(1)
- Swift 类构造器的使用
- 在servlet中用spring @Autowire 注入.
- MapServer 之 发布网络要素服务(WFS-Web Feature Service)
- Study JavaScript《Canvas Image相互转换》
- Java 数组Array 转换为 List
- JMS ActiveMQ 研究
- 2、UITextField的方法和属性