`
junlas
  • 浏览: 63505 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Dictionary对象弱引用的一点探讨

阅读更多

1.首先我写了两个测试类:

 

package test01
{
        import flash.events.MouseEvent;
        import flash.utils.Dictionary;
        import flash.display.Sprite;
        /**
         * @author  
         */
        public class MultiMovieClipTest extends Sprite
        {
                private var _dict : Dictionary;
                var _wy:WangYong;
                public function MultiMovieClipTest()
                {
                        initData();
                        this.stage.addEventListener(MouseEvent.CLICK, click);
                }

                private function click(event : MouseEvent) : void
                {
                        trace("===>",_wy);
                }

                private function initData() : void
                {
                        _dict = new Dictionary(false);
                        for (var i : i
nt = 0; i < 10; i++) {
                                if(i == 0){
                                        _wy = new WangYong();
                                        _dict[_wy] = new WangYong();
                                }else{
                                        _dict[new WangYong()] = new WangYong();
                                }
                        } 
                }

        }
}

 

 

package test01
{
        /**
         * @author 
         */
        public class WangYong
        {
        }
}

 

 

接着通过概要分析来开始观察WangYong这个实例的数量变化;

2.第一种观察(如代码中的:new Dictionary(false));
此时观察的结果如下:

 

 

第二种观察(_dict = new Dictionary(true););
此时观察的结果如下:

 

然后不停的点击强制垃圾回收的按钮,一会后结果又如下:

 

3.总结:
我就直接把API文档拷过来了:
指示 Dictionary 对象在对象上使用“弱”引用。 如果对某个对象的唯一引用位于指定的 Dictionary 对象中,则符合垃圾回收的条件,并且在回收对象时会被从表中删除。所以在使用时还是要当心的。。

ps:1.如果在使用_dict = new Dictionary(true),同时没有定义成员变量var _wy:WangYong;,那么输出的结果实例数就会是0个了。
2.如果Dictionary的key是基本类型数据,那么也不会自动回收。

分享到:
评论

相关推荐

    asp dictionary对象的用法

    在本篇内容中,我们将深入探讨ASP中Dictionary对象的用法及其一些相关的知识点和技巧。 首先,我们需要了解ASP Dictionary对象的创建方法。在ASP脚本中,我们可以使用`CreateObject`函数创建一个Dictionary对象实例...

    contains 和 Dictionary学习

    1. `Dictionary` 不会自动管理键的引用,如果键的对象被销毁,对应的条目也不会自动删除。 2. 由于键可以是任意对象,因此可能出现键冲突,需要确保键的唯一性。 3. `Dictionary` 不是序列化的,不能直接用于 XML 或...

    Dictionary-源码.rar

    本文将围绕“Dictionary-源码.rar”这个压缩包中的内容,深入探讨Dictionary类的源码实现,旨在帮助开发者更好地理解和运用这一核心组件。 Dictionary类在.NET框架中属于System.Collections.Generic命名空间,它是...

    C#面向对象编程期末参考题

    【描述】提到“期末开卷参考题”,暗示我们将探讨一些学生在学习过程中可能遇到的实际问题或考试题目,这些题目可能会涵盖C#面向对象编程的基本原理、类与对象、继承、封装、多态等关键概念。 在C#中,面向对象编程...

    C#Map映射各个方式性能大比拼

    本篇文章将探讨几种不同的C#对象复制方法,并进行性能对比,帮助开发者选择最合适的策略。以下是所涉及的知识点详解: 1. **浅复制与深复制** - 浅复制(Shallow Copy)仅复制对象的引用,不复制对象内部引用的...

    c#面向对象程序设计源代码

    5. 多态:多态性允许我们使用父类引用操作子类对象,提供了更大的灵活性。C#支持方法重写(Override)和方法重载(Overload)。重写是子类对父类方法的重新定义,以改变其功能;而重载是在同一作用域内创建多个同名...

    C#面向对象程序设计

    《C#面向对象程序设计》深入探讨了C#编程的核心概念——面向对象编程。面向对象编程(Object-Oriented Programming,OOP)是现代软件开发中的主流范式,C#作为.NET框架的主要语言,提供了丰富的支持来实现这一编程...

    Dictionary_23__C++_

    在这个主题下,我们可以探讨 C++ 的一些核心知识点: 1. **C++ 基础**:C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不仅支持过程化编程,也支持面向对象编程的程序设计语言。它由 Bjarne Stroustrup ...

    ASP.NET中Dictionary基本用法实例分析

    下面我们将深入探讨`Dictionary`类的基本功能、使用步骤以及相关操作技巧。 1. 引用命名空间: 在使用`Dictionary`之前,你需要在代码中引用`System.Collections.Generic`命名空间,因为`Dictionary, TValue&gt;`类就...

    C#语言面向对象精解教程

    本教程“C#语言面向对象精解”深入探讨了面向对象编程的基本原理和实践技巧。面向对象编程主要基于三个关键概念:封装、继承和多态。 1. 封装:封装是面向对象的核心特征之一,它允许我们将数据(属性)和操作这些...

    教学思路 c# 叶子文文

    在本文中,我们将深入探讨C#编程语言的基础概念,包括类、对象、数组、集合以及引用。这些知识点是C#编程的核心,对于任何初学者来说,理解和掌握它们都是至关重要的。 首先,我们来讨论“类”(Class)。类是C#中...

    C#编程语言与面向对象基础教程.rar.rar

    本教程将深入探讨C#的基础知识以及其在面向对象编程中的应用。 一、C#基础语法 1. 变量与数据类型:C#支持多种数据类型,包括基本类型(如int、float、bool)和引用类型(如类、接口)。变量必须先声明后使用,...

    c#面向对象编程课件2

    本教程将深入探讨C#中的面向对象编程特性,包括集合、多态和泛型编程。这些主题是理解和编写高效、可维护的C#代码的关键。 **1. 集合** 集合是C#中存储和管理多个对象的数据结构。它们类似于现实生活中的容器,...

    C#序列化与反序列化(包括复杂xml对象)

    本文将深入探讨C#中的XML序列化和反序列化技术,包括如何将XML文档解析为对象,以及如何将对象转换回XML文档进行存储。我们将详细讲解三种方法,涵盖从XML节点获取键值对(KV值)到处理对象数组和节点标签组合的反...

    C#泛型集合Dictionary&lt;K,V&gt;的使用方法

    在本文中,我们将深入探讨如何使用`Dictionary, TValue&gt;`,包括它的基本操作和特性。 首先,为了使用`Dictionary, TValue&gt;`,我们需要导入`System.Collections.Generic`命名空间。这个命名空间包含了C#中许多泛型...

    .NET Windows编程系列课程(2):C#语法和面向对象编程

    《.NET Windows编程系列课程(2):C#语法和面向对象编程》是针对初学者和进阶开发者的一门深入探讨C#编程语言及其面向对象特性的教程。本课程主要聚焦于C#的基础语法和核心面向对象编程概念,旨在帮助学习者掌握.NET ...

    基于Python的动态语言特点探讨.zip

    这简化了内存操作,但同时也可能导致内存泄漏,需要注意对象引用计数和循环引用的问题。 3. 高级数据结构:Python内置了丰富的数据结构,如列表(List)、元组(Tuple)、字典(Dictionary)和集合(Set),这些...

    解析pdf版本.rar.rar.rar

    2. **对象**:PDF文件由一系列独立的对象组成,包括字典(Dictionary)、数组(Array)、字符串(String)、字节串(Byte String)、名字(Name)和流(Stream)。每个对象都有一个唯一的标识符(Object Number)和...

    Pro .NET Memory Management

    - **弱引用与软引用**:在某些情况下,使用弱引用或软引用来替代强引用可以减轻内存压力。 ##### 3.3 减少内存碎片化 内存碎片化是指可用内存被分割成许多小块,无法被连续分配的状态。长期存在内存碎片化不仅会...

    Dictionary_1_visualc++_

    在"Dictionary_1_visualc++_"这个主题下,我们将会探讨Visual C++的基础知识、主要功能、以及如何使用它进行应用程序开发。 1. **基础知识** Visual C++的基础是C++编程语言,这是一种面向对象的语言,具有高效、...

Global site tag (gtag.js) - Google Analytics