关于iOS的强引用,弱引用及strong,retain,copy,weak,assignd
来源:互联网 发布:java如何防止xss攻击 编辑:程序博客网 时间:2024/06/06 00:10
初学者干货:
一、强引用和弱引用:
OC中的内存管理是通过“引用计数器”来实现的。
一个对象的生命周期取决于它是否还被其他对象引用(是否retainCount=0)。但在有些情况下,我们并不希望对象的销毁时间由是否被其他对象引用来决定,而是这个对象本该是什么时候销毁就什么时候被销毁。这时,我们得引入“强引用”和“弱引用”的概念。
强引用:当前对象被其他对象引用时,会执行retain操作,引用计数器+1。当retainCount=0时,该对象才会被销毁。因为我们要进行对象的内存管理,所以这是默认的引用方式。(默认是强引用)
弱引用:当前对象的生命周期不被是否由其他对象引用限制,它本该什么时候销毁就什么时候被销毁。即使它的引用没断,但是当它的生存周期(作用域)到了时就会被销毁。
在定义属性时,若声明为retain类型的,则就是强引用;若声明为assign类型的,则就是弱引用。后来内存管理都由ARC来完成后,若是强引用,则就声明为strong;若是弱引用,则就声明为weak。
所以说,retain和strong是一致的(声明为强引用);assign和weak是基本一致的(声明为弱引用)。之所以说它俩是基本一致是因为它俩还是有所不同的,weak严格的说应当叫“ 归零弱引用”,即当对象被销毁后,会自动的把它的指针置为nil,这样可以防止野指针错误。而assign销毁对象后不会把该对象的指针置nil,对象已经被销毁,但指针还在痴痴的指向它,这就成了野指针,这是比较危险的。
二、避免“强引用循环“的僵局:
默认的引用方式是强引用,但上面说了有时我们还得使用弱引用,那是什么情况呢?
强引用循环:A对象强引用了B对象,B对象也强引用了A。因为都是强引用,也就是无论是A是B都要在对方的引用断了后才能销毁,但要断了引用,就必须对方对象销毁。就会出现这种僵局,为了避免出现这种情况,就应该有一个对象“示弱”,使其为“弱引用”。
三、比较常见的,视图中的父子视图之间的引用:父视图强引用子视图,子视图弱引用父视图。
总结:由于要进行内存管理的缘故,OC里的引用默认都是强引用,但为了避免出现”强引用循环僵局“,所以有了弱引用(assign)。
retain和strong都是 指针拷贝。当有其他对象引用当前对象时,会拷贝一份当前对象的地址,这样它就也指向当前对象了。所以,还是同一个对象,只是retainCount+1;
而copy则是 内容拷贝。是实实在在的拷贝一个新的对象,拷贝了它的内存内容,成为一个新的对象(retainCount=1)。
深拷贝(mutableCopy)和浅拷贝(copy):
深拷贝就是内容拷贝,浅拷贝就是指针拷贝。
在OC中,若要进行对象的拷贝,则该对象所属的类必须遵守NSCopying和NSMutableCopy协议,并重写copyWithZone:和mutableCopyWithZone:方法。而系统原生类,之所以可以直接进行拷贝是因为它已帮我们自动做了这些事。
- 关于iOS的强引用,弱引用及strong,retain,copy,weak,assignd的关系
- 关于iOS的强引用,弱引用及strong,retain,copy,weak,assignd的关系
- 关于iOS的强引用,弱引用及strong,retain,copy,weak,assignd的关系
- 关于iOS的强引用,弱引用及strong,retain,copy,weak,assignd的关系
- 关于iOS的强引用,弱引用及strong,retain,copy,weak,assignd
- iOS 强引用,弱引用及strong,retain,copy,weak,assignd的关系
- iOS学习之强引用_strong和弱引用_weak,retain,copy,assignd的关系
- 重新理解strong与weak(强引用,弱引用),以及strong和copy的区别
- iOS语法学习强引用strong和弱引用weak
- strong and weak 强引用和弱引用的区别
- 强引用(strong)\弱引用(weak)\unsafe_unretained的区别
- (ios实战):retain,copy,assign及autorelease ,strong,weak
- (ios实战):retain,copy,assign及autorelease ,strong,weak
- iOS -- retain,copy,assign及autorelease ,strong,weak
- iOS开发-assign、retain、copy、strong、weak的区别
- iOS开发之assign retain copy strong weak 的区别
- iOS nomatic strong,weak,retain,assign,copy 等的区别。
- retain copy assign strong weak的区别(iOS)
- 高德地图——路线规划
- MySQL锁定状态查看命令
- Codeforces_158A
- 基于MFC的简单计算器
- 自定义控件(六)更改RatingBar的星星颜色
- 关于iOS的强引用,弱引用及strong,retain,copy,weak,assignd
- 通用shellcode的编写、调用 实验缓冲区溢出攻击(非远程)调用shellcode实例(二)
- Java- Hibernate 多对多关系映射
- cmd命令大全/cmd命令提示符大全
- 基于tcp raw socket实现的端到端rtt,丢包率检测程序(1)
- java 浅析I/O模型
- UIColor 常用方法
- Swift创建一个UIImageView
- HTML5创建一个径向/圆渐变