C# 强引用和弱引用的区别 弱引用的使用

什么是强引用?
Object obj = new Object(); 这就是一个强引用,内存分配一份空间用以存储Object数据。当一个对象被强引用的形式创建的时候,本身引用的次数为1.
接着Object o = obj.执行之后Object的引用次数为2.所以强引用会导致被引用的对象的引用次数加1.
什么是弱引用?
弱引用可以保持该对象的引用,但是不增加对象的引用次数。这样GC就能在必要时候释放对象,回收内存。
对于那些创建便宜但耗费大量内存的对象,希望保持该对象的引用,又要在应用程序中使用,同时希望GC回收,可以考虑使用弱引用。
弱引用分为短弱引用和长弱引用,默认使用的是短弱引用。
Short Weak Reference(短弱引用):一旦对象被垃圾回收,引用就会设置为null,上文所举的例子都是短弱引用。
Long Weak Reference(长弱引用):如果对象存在一个finalizer(终结器/析构函数) 并且引用被以正确的方式创建。那么引用将一直指向对象,直到finalizer结束。
使用时机:

对象相对较大,易于创建,生命周期高度可变。

使用方法:

public void ST()
{
    List<int> t = new List<int>(){1, 2, 3};
    StartCoroutine(Func(t));
}
public IEnumerator Func(List<int> t)
{
    WeakReference<List<int>> tweak = new WeakReference<List<int>>(new List<int>(t));

    yield return new WaitForSeconds(0.1f);
    
    if (tweak.TryGetTarget(out var list))
    {
        UnityEngine.Debug.Log("this is not null");
    }
    else
    {
        UnityEngine.Debug.Log("this is null");
    }
}

使用弱引用,结果this is null.
如果使用强引用,局部变量t在函数结束的时候还存在强引用,协程中还能获取到数组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值