首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

weak的底层原理

我们经常会使用weak来解决OC中的循环引用问题,因为weak不会使引用计数加1;并且weak修饰的指针还会在对象被销毁后自动置空,这有效的解决了野指针调用的问题。...如果weak指针之前弱引用过别的对象,则会调用weak_unregister_no_lock函数,将旧的weak指针地址移除。...4.1 weak_entry_for_referent取元素 static weak_entry_t * weak_entry_for_referent(weak_table_t *weak_table...weak_table,来存储所有的弱指针信息; 弱引用表weak_table中又有一个数组weak_entries,其元素类型是weak_entry_t,每一个弱引用对象都会对应一个weak_entry_t...referent的weak_entry_t也要移除出weak_table } weak_clear_no_lock这个函数中做的事情就是:在弱引用表weak_table中获取到弱引用对象所对应的weak_entry_t

88732

重读swift官方文档之 weak unowned

在swift开发中强引用和循环引用很容易发生的,针对这个情况swift使用了两个关键词作为破处这种循环引用的方式:weak unowned A weak reference is a reference...You indicate a weak reference by placing the weak keyword before a property or variable declaration....红线处真是指出weak的原理:当实例的引用销毁时,ARC会自动将weak修饰的引用设置为nil 基于此可以将Person中的department设置为weak, 或者Department中的tenant...设置为weak class Apartment { let unit: String init(unit: String) { self.unit = unit } weak...因此,在ARC下,weak不实用于那些一旦移除strong引用就立即销毁的情况(weak指向的是在内存紧张才再系统被动执行下回收的) Like a weak reference, an unowned

53630

深入理解 weak-strong dance

weak-strong dance 简介 使用 Block 时可以通过__weak来避免循环引用已经是众所周知的事情: // OCClass.m __weak typeof(self) weakSelf...这时可以在 Block 内部(第一句)再持有一次weakSelf指向的对象,保证在执行 Block 期间该对象不会被废弃,这就是所谓的 weak-strong dance: __weak typeof(...显然,这里会导致循环引用,而使用了__weak之后,表示 Block 对象的结构体中的成员变量occlass也将附有__weak修饰符: __weak OCClass *occlass; 顺便说一下,_..._weak修饰的变量不会持有对象,它用一张 weak 表(类似于引用计数表的散列表)来管理对象和变量。...一旦该对象被废弃,就通过对象地址在 weak 表中找到变量的地址,赋值为 nil,然后将该条记录从 weak 表中删除。

1.9K40

【C++】智能指针:weak_ptr

一、产生原因 weak_ptr的产生,主要是为了配合shared_ptr的使用,对于shared_ptr来说,有一种循环引用会导致shared_ptr的引用计数一直不能变为0,如此以来导致内存一直不能释放的掉...3.weak_ptr可以从一个shared_ptr或者另一个weak_ptr对象构造,获得资源的观测权。 4.weak_ptr没有共享资源,它的构造不会引起指针引用计数的增加。...weak_ptr的使用特点: 1.使用weak_ptr的成员函数use_count()可以观测资源的引用计数, 另一个成员函数expired()的功能等价于use_count()==0, 但更快,表示被观测的资源...2.weak_ptr可以使用一个非常重要的成员函数lock()从被观测的shared_ptr获得一个可用的shared_ptr对象, 从而操作资源。...的核心就是利用weak_count 替代了shared_count这一个引用计数。

91310

Rust源码分析——Rc 和 Weak 源码详解

weak: Cell:这个字段是一个 Cell 类型的包装,用于存储弱引用计数(weak reference count)。...每当创建一个新的 Weak 引用时,弱引用计数会递增;当Weak 引用离开作用域或被丢弃时,弱引用计数递减。 value: T:这是 Rc 包装的实际值的字段。...Weak 我们顺便来看一下弱引用,Weak 用于创建弱引用,通常与 Rc 智能指针一起使用。 pub struct Weak<T: ?...这个无效指针用于表示一个 Weak 弱引用指针,它不引用任何真实的数据,但是用于表示一个空的 Weak 实例,然后将其包装在 NonNull 中,并返回作为 Weak 实例的一部分。...设置为 usize::MAX 的目的是为了避免在创建 Weak 时需要分配堆内存。由于 Weak 通常用于检查数据的存在性而不需要实际引用数据。

34810
领券