C#中的强引用和弱引用

C#强引用和弱引用的区别 C#中强引用保持对象存活(默认引用类型),而弱引用(通过WeakReference类实现)允许对象被垃圾回收器回收。强引用直接访问对象,弱引用需检查IsAlive后再访问Target。强引用适合长期持有的核心对象,但可能导致内存泄漏;弱引用适合缓存等临时数据,能自动释放内存但对象可能随时失效。代码示例显示强引用对象在GC后仍存活,而弱引用对象可能被回收。实际开发中应根据场景选择:优先强引用保证可靠性,仅在需要内存优化时使用弱引用。 阅读详情

我们平常用的都是对象的强引用,如果有强引用存在,GC是不会回收对象的。我们能不能同时保持对对象的引用,而又可以让GC需要的时候回收这个对象呢?.NET中提供了WeakReference来实现。弱引用可以让您保持对对象的引用,同时允许GC在必要时释放对象,回收内存。对于那些创建便宜但耗费大量内存的对象,即希望保持该对象,又要在应用程序需要时使用,同时希望GC必要时回收时,可以考虑使用弱引用。


一:什么是弱引用

      了解弱引用之前,先了解一下什么是强引用

  例如 : Object obj=new Object();     就是一个强引用,内存分配一份空间给用以存储Object数据,这块内存有一个首地址,也就是obj所保存的数据,内存分配的空间中不仅仅保存着Object对象信息,还保存着自己(Object本身)被引用的次数。

  当一个对象被强引用的形式创建的时候,本身被引用的次数已经为1.

  接着Object o=obj; 这句代码执行之后,obj指向的Object的存储空间已经被引用了2次,所以Object保存的被引用数值为2.

  总结:强引用最终导致的结果就是被引用的对象的被引用次数+1;

  相反的弱引用就是不会对被引用对象的被引用次数有任何影响。


二:弱引用有什么作用

  防止内存泄露。

Object obj=new Object();

  当你在通过异步的形式访问网络上面的资源的时候,需要的时间可能会比较长,在数据返回之前,用户很可能转向了其他的页面,如果异步访问的对象(obj)对本地的一个对象(Object)是强引用的话,那么在这个异步访问对象(obj)被释放之前,也即在数据被回调之前,这个被引用的对象(Object)是不会被销毁的,这样一来,就导致内存一直被占用。

WeakReference weakObj=new WeakReference(Object);

  此时就可以使用弱引用,弱引用对象(weakObj)发出异步请求,在回调之前,如果用户要转到其他的页面,这个被引用的对象(Object)是可以被释放的,这样子就不会出现内存一直被占用的现象。


三:怎样使用弱引用

  弱引用类: WeakReference //有两个重载的构造函数

  

WeakReference WeakObj=new WeakReference(Object);//弱引用方式

 IsAlive属性是判断此弱引用对象所引用的对象是否还存在,存在:IsAlive=True;

     Target属性是设置该弱引用对象所引用的数据对象的值

弱引用使用起来很简单,看下面的代码:

Object obj = new Object();
WeakReference wref = new WeakReference( obj );
obj = null;

第一行代码新建了一个新的对象,这里叫它对象A,obj是对对象A的强引用。接着第二行代码新建了一个弱引用对象,参数就是对象A的强引用,第三行代码释放掉对对象A的强引用。这时如果GC进行回收,对象A就会被回收。
怎样在取得对象A的强引用呢?很简单,请看代码2:

Object obj2 = wref.Target;
if( obj2 != null )
{
// 做你想做的事吧。
}
else
{
// 对象已经被回收,如果要用必须新建一个。
}

只要显示的将弱引用的Target属性附值就会得到弱引用所代表对象的一个强引用。不过在使用对象之前要对其可用性进行检查,因为它可能已经被回收了。如 果你得到的是null(VB.NET下为Nothing),表明对象已经被回收,不能再用了,需要重新分配一个。如果不是null,就可以放心大胆的用 了。
 


 

 

解密C#内存管理艺术:深入剖析WeakReference与ConditionalWeakTable的弱引用实践 在C#中,弱引用是一种特殊的引用类型,它允许对象在满足垃圾收集器(GC)的回收条件时被自动回收,即使存在弱引用指向该对象。弱引用通过类实现。此外,是一个特殊的数据结构,它使用弱引用存储键值对,使得当键对象不再强引用时,对应的键值对也能被垃圾收集器自动清理。接下来,我们将通过详细的代码示例和注释,深入探讨这两种弱引用的实现及其应用场景。 阅读详情

相关推荐

8、C 编程中的内存管理与性能优化

本文深入探讨了C#编程中的内存管理与性能优化策略,涵盖了值类型与引用类型的内存分配、参数传递方式、装箱与拆箱对性能的影响、对象引用机制、垃圾回收原理、内存泄漏预防以及性能监测的最佳实践,旨在帮助开发者编写高效稳定的C#应用程序。

rgv2345678的博客 61

C# 强引用与弱引用的区别

我们平常用的都是对象的强引用,如果有强引用存在,GC是不会回收对象的。我们能不能同时保持对对象的引用,而又可以让GC需要的时候回收这个对象呢?.NET中提供了WeakReference来实现。弱引用可以让您保持对对象的引用,同时允许GC在必要时释放对象,回收内存。对于那些创建便宜但耗费大量内存的对象,即希望保持该对象,又要在应用程序需要时使用,同时希望GC必要时回收时,可以考虑使用弱引用。

从_零_开始的专栏 4316

C#对象的“死亡陷阱“:90%的内存泄漏都栽在这些地方!

摘要:C#对象生命周期管理存在5大陷阱,本文重点分析前两个:1)未正确释放非托管资源导致"内存黑洞",FileStream等非托管资源需通过IDisposable接口显式释放;2)事件订阅未取消导致"内存泄漏",事件发布者会保持对订阅者的强引用。文章通过代码示例展示了错误用法及正确实现方式,强调使用using语句和取消事件订阅的重要性。这些陷阱在大型应用中可能导致系统资源耗尽或内存泄漏,需特别注意防范。

墨夶的博客 597

C#弱引用

.NET框架提供了另一有趣的特色,被用于实现多样的高速缓存。在.NET中弱引用通过System.WeakReference类实现。弱引用为引用的对象提供一项机制,使被引用的对象能够被垃 圾收集器作用。ASP.NET高速缓存就使用了弱引用。如果内存使用率太高,高速缓存将被清除。 强制垃圾收集 .NET框架为开发者提供System.GC类来控制垃圾收集器的一些方面。垃圾收集可以通过调用GC.Col...

weixin_34211761的博客 286

【入门篇】第五章 第一次与 AI Agent 交互

本文介绍了OpenClaw中最基本的用户与AI Agent交互方式,剖析了Agent和Gateway两个核心组件的作用,通过简单示例展示了从用户请求到结果返回的完整执行流程,说明了最小交互过程对验证系统可用性的重要意义,为后续学习复杂任务执行机制奠定基础。

lanyv的博客 512

Coding Plan:程序员真实工作的可执行编码决策框架

Coding Plan 是一种面向工程实践的编码决策方法论,它超越传统学习路径,聚焦于代码在真实业务系统中的上下文对齐、影响控制与可演进性保障。其核心在于将模糊的开发直觉转化为可度量、可验证、可协作的日常动作,涵盖目标对齐、上下文锁定、验证闭环、协作契约和演进预留五大锚点。结合2026年AI辅助编码新范式,它强调将大模型作为‘上下文翻译器’而非代码生成器,并通过分钟级工作块、技术债主动发行、可观测性前置等机制,显著提升交付确定性与系统长期健康度。本文详解该框架的底层逻辑与落地实践。

weixin_33326218的博客 436

1分钟理清C/C++的弱符号和强符号,弱引用和强引用

1分钟理清C/C++的弱符号和强符号,弱引用和强引用

大道至简,求同存异 1734

AI计算,为什么要用GPU?

几年后,2012年,神经网络之父杰弗里·辛顿(Geoffrey Hinton)的两个学生——亚历克斯·克里切夫斯基(Alex Krizhevsky)、伊利亚·苏茨克沃(Ilya Sutskever),利用“深度学习+GPU”的方案,提出了深度神经网络AlexNet,将识别成功率从74%提升到85%,一举赢得Image Net挑战赛的冠军。根据形态,GPU可分为独立GPU(dGPU,discrete/dedicated GPU)和集成GPU(iGPU,integrated GPU),也就是常说的独显、集显。

经营范围: CTA、SRRC、CCC、移动、电信、联通入库 1674

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

什么是强引用? Object obj = new Object(); 这就是一个强引用,内存分配一份空间用以存储Object数据。当一个对象被强引用的形式创建的时候,本身引用的次数为1. 接着Object o = obj.执行之后Object的引用次数为2.所以强引用会导致被引用的对象的引用次数加1. 什么是弱引用? 弱引用可以保持该对象的引用,但是不增加对象的引用次数。这样GC就能在必要时候释放...

qq_31480839的博客 1098

【K8S系列】在 Kubernetes 中使用 Prometheus 进行监控的详细指南

Prometheus 是一个开源的监控和报警工具,广泛用于 Kubernetes 环境中。本文将深入探讨如何通过 Kubernetes 中的注解配置 Prometheus 的抓取设置,以高效监控服务,并确保系统的可靠性和可维护性。

颜淡慕潇 2万+

手把手教你学PCIE--系统内存管理:GART(Graphics Address Remapping Table)的典型用途详解

GART(图形地址重映射表)是GPU的核心组件,主要用于地址映射转换。其典型用途分为物理模式和虚拟模式两类:在物理模式下,GART将GPU虚拟地址映射到分散的物理内存,支持DMA连续访问非连续内存块,适用于GPU渲染纹理采样和AI推理数据搬运等场景;在虚拟模式下,GART配合IOMMU实现多级映射,将GPU虚拟地址转换为虚拟机物理地址再映射到宿主机物理地址,确保多租户隔离,应用于云服务器GPU共享和容器化AI训练等虚拟化环境。两种模式分别优化了高性能计算场景和虚拟化场景的需求。

MHD0815的博客 366

c#中的弱引用:WeakReference

1.强引用 我们实例化一个对象,直接引用了这个对象就是强引用。在这个对象被强引用的时,GC无法回收这个对象。 只有当该对象所有的强引用都失去的时候,GC才会回收该对象。 2.弱引用 弱引用可以让您保持对对象的引用,同时允许GC在必要时释放对象,回收内存。 一般使用场景:对象过大,并且不经常访问。这样我们就可以创建一个弱引用,当不常用该对象的时候,GC可以回收该对象,当需要引用对象,可以先...

dgnwy6921的博客 342

把 SAP S/4HANA 中的 Maintain Email Templates 用好:从模板维护、语言变体、业务绑定到传输治理的完整实践

摘要:SAP邮件模板管理常被低估,实则关乎审批通知、业务提醒等关键输出。官方推荐通过复制标准模板实现自定义,而非直接修改标准内容,以保持核心稳定。模板维护涉及语言变体、业务绑定、数据传输等治理环节,需业务顾问与开发团队协作确保字段来源与渲染逻辑。实施时需注意Fiori配置、权限分配及传输管理,避免测试与生产环境差异。模板设计应平衡灵活性与复杂度,遵循分层测试策略(内容、数据、流程),并建立命名规范以维护资产清晰度。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 66

.NET弱引用

当把一个对象引用分配给一个变量时,该变量就包含对对象的一个强引用(strong reference)。垃圾收集器不会收回强引用仍在使用的对象。只要当变量离开作用域,或者显示地给变量分配null时,强引用才被删除。 弱引用(weak reference)可以保持对对象的引用,同时允许垃圾收集器在它认为适当的垃圾收集时间释放对象,回收内存。假设有一个对象创建相对便宜,但需耗费...

weixin_30537391的博客 139

芒果YOLOv8改进165:损失函数angleLoss:即插即用 | 独家首发原创新颖|公开数据集DOTA高效无损涨点0.5% | 旋转检测

YOLOv8改进:旋转检测Loss损失函数angleLoss:即插即用 | 独家首发原创新颖|公开数据集DOTA高效无损涨点0.5%

包括YOLOv5、YOLOv7、YOLOv8等模型改进 1148

零基础学习simulink-- 基于自适应模糊PID控制的直流电机速度控制系统

通过上述代码实现,您可以逐步创建和搭建一个基于自适应模糊PID控制的直流电机速度控制系统。该系统能够根据电机的状态和误差实时调整PID参数,确保电机速度稳定在设定范围内。自适应模糊PID控制具有较强的鲁棒性和适应性,能够在存在不确定性和扰动的情况下提供快速且精确的控制性能。Simulink提供了强大的建模和仿真工具,使得控制系统工程师能够快速构建复杂的控制算法,并将其应用于实际工程中。直流电机建模:建立直流电机的动态模型,包括电枢电压、电流、转速和负载扭矩。自适应模糊PID控制器设计。

amy_mhd的博客 413

Xlua 和 c# 之间 gc 的原理

xlua 和 c# gc 原理

陈瓜瓜的错题集 981

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

从C++学C# [6] 垃圾回收简述

概述 内存管理方法 回收的时机 强引用和弱引用 非托管资源 后台垃圾回收 附录 概述 在C#中,提供了和Java一样的垃圾回收机制,当一个对象没有了任何指向其的引用,那么垃圾回收器(Garbage Collector)就会将该块内存回收。与其他语言一样,其管理的是堆内存。 默认情况下,在32位计算机里每个进程都有2GB用户态的虚拟地址。 内存管理方法 C#的垃圾回收器...

小手挥墨 535

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C#教程(4)-----托管和非托管的资源(更新中......)

文章目录一、资源二、后台内存管理1.值数据类型2. 引用数据类型3.垃圾回收三、强引用和弱引用四、处理非托管的资源1.析构函数或终结器2.IDisposable接口3.using语句4.实现IDisposable接口和析构函数5.IDisposable和终结器的规则五、不安全的代码1.用指针直接访问内存2.指针示例:PointerPlayground3.使用指针优化性能六、平台调用 一、资源 资源...

qq_43679333的博客 752

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

WPF进阶之接口(4):ICommand实现详解

上一章WPF进阶之接口(3):INotifyPropertyChanged,ICommand中我们遗留了几个问题,我将在本节中做出解释。在详细解释ICommand实现之前,我们现在关注一下什么是:弱引用(WeakReference) 弱引用: 表示弱引用,即在引用对象的同时仍然允许垃圾回收来回收该对象。 如果应用程序的代码可以访问一个正由该程序使用的对象,垃圾回收器就不能收集...

weixin_33978016的博客 434

WeakReference体验

Code 1 using System; 2 3 namespace Demo 4 { 5 class Program 6 { 7 static void Main(string[] args) 8 { 9 //实验110 Console.WriteLine("实验1,弱引用");11...

weixin_30292843的博客 68

第三章:对象和类型

1、什么是类? 包含了数据成员和函数成员。 数据成员是包含类的数据-字段、常量和事件的成员; 函数成员提供了操作类中数据的某些功能,包括方法、属性、构造函数和终结器、运算符以及索引器。 包含了嵌套的类型(如其他类)。 2、ref参数作用 方法对变量所做的任何改变都会影响原始对象的值。(一般在值传递中使用) 方法的...

broad_ocean的博客 350

C#中的弱引用使用

记录C#弱引用使用

weixin_50702814的博客 1025

C#中的弱引用

关于C#中的弱引用 一:什么是弱引用 了解弱引用之前,先了解一下什么是强引用   例如 : Object obj=new Object(); 就是一个强引用,内存分配一份空间给用以存储Object数据,这块内存有一个首地址,也就是obj所保存的数据,内存分配的空间中不仅仅保存着Object对象信息,还保存着自己(Object本身)被引用的次数。   当一个对象被强引用的...

cxu123321的博客 200
上一篇: Unity3d DOTween 插件 详细使用方法
下一篇: Unity3D各平台路径(包括手机内置存储路径、SD卡等等)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值