__weak及弱引用简记
来源:互联网 发布:淘宝网的性用品有用吗 编辑:程序博客网 时间:2024/04/28 19:04
用__weak修饰声明的引用,即得到对象的弱引用
相关资料:
官方资料
weak的生命周期:具体实现方法
弱引用能做什么:
在引用计数的回收机制下,弱引用(weak reference)不会增加引用计数,如此一来就不会影响对象被回收的时机(当对象回收时,弱引用会置为空指针)。
实现弱引用的机制有哪些要素:
弱引用的标记与清理
oc的实现:
oc以额外存储弱引用的方式来标记弱引用,当生成一个弱引用时,oc会将弱引用存储在和引用的对象关联的弱引用存储区,在对象销毁时清空该存储区内容
代码上:
对象关联的引用存储sidetable(去掉了部分代码)
struct SideTable { spinlock_t slock; RefcountMap refcnts; weak_table_t weak_table;};
struct weak_table_t { weak_entry_t *weak_entries; size_t num_entries; uintptr_t mask; uintptr_t max_hash_displacement;};
weak_entry_t 是weak_table_t真正用于存储弱引用的地方,以散列表的形式存储(存储细节可参考weak 弱引用的实现方式)
struct weak_entry_t { DisguisedPtr<objc_object> referent; union { struct { weak_referrer_t *referrers; uintptr_t out_of_line_ness : 2; uintptr_t num_refs : PTR_MINUS_2; uintptr_t mask; uintptr_t max_hash_displacement; }; struct { // out_of_line_ness field is low bits of inline_referrers[1] weak_referrer_t inline_referrers[WEAK_INLINE_COUNT]; }; };};
0 0
- __weak及弱引用简记
- OC 弱引用 weak __weak assign __assign
- __weak弱引用的对象定义
- 强引用和弱引用(__strong和__weak)
- 防止循环引用__weak
- ios block 使用注意,必须都用__weak 弱引用
- __weak弱引用block造成提前释放的问题
- 简单快速的理解block的循环引用及__weak的使用条件
- [IOS 开发] 强引用(__strong)和 弱引用(__weak)
- iOS 强引用(__strong)和弱引用(__weak)浅析
- IOS学习—强引用(__strong)和 弱引用(__weak)
- ios block 去循环引用 __weak
- __weak
- __weak
- __weak
- __weak
- __weak
- __weak
- Spring Boot+mybatis+thymeleaf集成通用mapper分页查询
- ubuntu中文字体问题
- 环境变量
- 148. Sort List
- 【Java】Java中,String、StringBuffer和StringBuilder的区别
- __weak及弱引用简记
- Reorder the Books HDU - 5500
- docker使用nginx镜像运行
- 判断链表中有环
- 欢迎使用CSDN-markdown编辑器
- python程序打包loggingconf问题
- CSS揭秘--笔记--紧贴底部的页脚
- PAT A1039
- jquery对json 键值对或数组的增加、删除、遍历操作