(再次理解strong与weak)强引用与弱引用
来源:互联网 发布:淘宝箱小型印刷机 编辑:程序博客网 时间:2024/05/17 08:18
默认情况下,一个指针都会使用 __strong 属性,表明这是一个强引用。这意味着,只要引用存在,对象就不能被销毁。这是一种所期望的行为:当所有(强)引用都去除时,对象才能被收集和释放。
不过, 有时我们却希望禁用这种行为:一些集合类不应该增加其元素的引用,因为这会引起对象无法释放。在这种情况下,我们需要使用弱引用(不用担心,内置的集合类 就是这么干的),使用 __weak 关键字。NSHashTable 就是一个例子。当被引用的对象消失时,弱引用会自动设置为 nil。Cocoa 的 Notification Center 就是这么一个例子,虽然这已经超出纯 Objective-C 的语言范畴
自己更深理解:
1.(weak与strong)不同的是:当一个对象不再有strong类型的指针指向它的时候,它就会被释放,即使改对象还有_weak类型的指针指向它;
类比为自己的思想:
逻辑:
除非5个绳子都脱落,否则狗是不会跑掉的,类比,5个strong指针都=nil,则该对象释放
weak型指针就像是一个小孩子指着狗喊道:“看,有一只狗在那里”,只要狗一直被拴着,那么小孩子就能看到狗 (weak指针)会一直指向它,
只要最后一个strong型指针不再指向对象,那么对象就会被释放,同时所有的weak型指针都将会被清除。
在OC中strong就相当于retain属性,而weak相当于assign。只有一种情况你需要使用weak(默认是strong),就是为了避免retain cycles(就是父类中含有子类{父类retain了子类},子类中又调用了父类{子类又retain了父类},这样都无法release)
阅读全文
0 0
- (再次理解strong与weak)强引用与弱引用
- (再次理解strong与weak)强引用与弱…
- 重新理解strong与weak(强引用,弱引用),以及strong和copy的区别
- @property的属性 strong 和 weak 深刻理解(强引用与弱引用)
- 理解strong与weak)强引用与弱引用转载自《http://blog.sina.com.cn/s/blog_7c8dc2d50101lc08.html》
- strong and weak 强引用和弱引用的区别
- 强引用(strong)\弱引用(weak)\unsafe_unretained的区别
- iOS语法学习强引用strong和弱引用weak
- 强引用与弱引用
- 强引用与弱引用
- Objective-C语言特性——强引用、弱引用(Strong、Weak)
- 关于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的关系
- 关于强引用,软引用,弱引用,虚引用(Strong references, Soft references, Weak references, Phantom references)
- android加固
- 【中间件】——java企业版规范与中间件
- Bootstrap一个静态的模态窗口实例,实现弹出信息窗口(也可做图片大图弹出)
- 安卓代码管理及代码格式改动对测试范围的影响
- 圆圈中最后剩下的数字(Java实现)
- (再次理解strong与weak)强引用与弱引用
- Android Studio导入工程的正确姿势
- 机器学习实战——python实现DBSCAN密度聚类
- 如何选择ESD保护元件- TVS器件(压敏电阻,聚合物,硅二极管)
- 组件和自定义指令的区别
- Codeforces 808D Array Division 题解
- lanuch.java
- Bootstrap三种表单布局的使用方法
- Git客户端SourceTree的使用