Topic:对于用户自定义的VO对象进行深拷贝,一种VO对象的某属性可能是另一种VO对象的实例。

方法1:通过传说中的“AS3隐藏特性——ByteArray.writeObject和readObject”进行操作,代码如下:

registerClassAlias("test.vo.ResVO", ResVO);
registerClassAlias("test.vo.TestVO", TestVO);
var vo:TestVO = new TestVO();
vo.name = "abc";
vo.level = 20;
vo.res = new ResVO();
vo.res.gold = 500;
var nT:int = getTimer();
var voClone:TestVO;
for (var i:int = 0; i < 100000; i++)
{
voClone = vo.clone();
}
trace(getTimer() - nT);

TestVO类代码如下:

public class TestVO
{
private var m_strName:String;
private var m_nLv:int;
private var m_obRes:ResVO;
/**
*/
public function get level():int{return m_nLv};
public function set level(nLv:int):void
{
m_nLv = nLv;
}
public function get name():String{return m_strName};
public function set name(strName:String):void
{
m_strName = strName;
}
public function get res():ResVO{return m_obRes};
public function set res(value:ResVO):void
{
m_obRes = value;
}
/**
*/
public function clone():TestVO
{
var bta:ByteArray = new ByteArray();
bta.writeObject(this);
bta.position = 0;
return bta.readObject();
}
}

ResVO类代码如下:

public class ResVO
{
private var m_nGold:int;
/**
*/
public function get gold():int{return m_nGold};
public function set gold(value:int):void
{
m_nGold = value;
}
}

执行时间:average(1662,1669,1681,1695,1691)=1680ms

另外,我们可以对TestVO.clone()函数稍加修改,使其中的ByteArray可以重用,代码如下:

public function clone(bta:ByteArray):TestVO
{
bta.length = ;
bta.writeObject(this);
bta.position = ;
return bta.readObject();
}

执行时间:average(1582,1581,1583,1575,1590)=1582ms


方法2:在VO类的clone方法中对属性逐个赋值

TestVO.clone()函数代码如下:

public function clone():TestVO
{
var voClone:TestVO = new TestVO();
voClone.level = m_nLv;
voClone.name = m_strName;
voClone.res = m_obRes.clone();
return voClone;
}

(此处省略ResVO.clone()函数代码)

执行时间:average(187,187,194,186,188)=188ms

最新文章

  1. Android成长日记-数据存储之SharedPreferences
  2. OJ上 G++ 与 C++ 的区别
  3. 【HTTP协议】响应头中的Content-Length和Transfer-Encoding
  4. C#数字千分位问题
  5. 问题-[DelphiXE2]提示第三控件不存在
  6. 使用附加导航(affix)实现内容切换
  7. 用python随机生成数据,再插入到postgresql中
  8. inotifywait实现目录监控
  9. SharePoint Framework (SPFx)安装配置以及开发-基础篇
  10. 读书笔记 effective c++ Item 16 成对使用new和delete时要用相同的形式
  11. 团队作业8——第二次项目冲刺(Beta阶段)--第一天
  12. 对比MFC和Winform及WPF
  13. [浏览器事件循环] javaScript事件循环 EventLoop
  14. jQuery计算文本宽度和input标签根据输入字符动态自适应宽度的实现
  15. 根文件系统之init
  16. NPOI2.2.0.0实例详解(九)—设置EXCEL单元格【时间格式】
  17. GMap.NET实现电子围栏功能(WPF版)
  18. web前端利用turf.js生成等值线、等值面
  19. 使用Wisdom RESTClient进行自动化测试,如何取消对返回的body内容的校验?对排除的JSON属性字段不做校验?
  20. IE8 AJAX 不能正常工作 解决办法

热门文章

  1. fiddler Android下https抓包全攻略
  2. winserver 2008 r2 iis7.5 实现php wordpress url静态化操作步骤(UrlRewrite实现)
  3. 剑指offer系列50--不用加减乘除做加法
  4. Spring实战5:基于Spring构建Web应用
  5. HTML标签使用特写
  6. 105. Construct Binary Tree from Preorder and Inorder Traversal
  7. window下部署php_redis扩展
  8. hdu 5698 瞬间移动(排列组合)
  9. CF 445A 简单DP
  10. freemodbus线圈中的位操作