2011年5月11日 星期三

FlashBuilder Object References view(對象引用) 使用

Object References View是FlashBuilder分析模式裡的一個功能,用來追蹤物件實體的被參考狀況。

使用範例:
Step1.建立如下資料結構















測試程式中,將會建立hero.mxml 、TestInnerObject.as、TestObject.as三支程式來測試Object References View的使用功能。


程式碼如下:
//hero.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
               xmlns:s="library://ns.adobe.com/flex/spark"
               xmlns:mx="library://ns.adobe.com/flex/mx"
               minWidth="955" minHeight="600"
               applicationComplete="applicationComplete(event)">
    <fx:Script>
           <![CDATA[
                  import com.test.TestObject;
                  import mx.events.FlexEvent;
                  private var _t1:TestObject;
                  private var _t2:TestObject;
                  protected function applicationComplete(event:FlexEvent):void
                  {
                    _t1 = new TestObject();
                    _t1 = new TestObject();
                    _t2 = new TestObject();
                    _t2.name = "阿瓜";
                  }
           ]]>
    </fx:Script>
</s:Application>


//TestInnerObject
 package com.test

{
  public class TestInnerObject
  {
   public function TestInnerObject()
   {
   }
   public var money:int;
  }
}

//TestObject.as
package com.test
{
 public class TestObject
 {
  public function TestObject()
  {
   innerObject = new TestInnerObject();
   innerObject.money = 100;
  }  
  private var _name:String;
  public function get name():String
  {
   return _name;
  }
  public function set name(value:String):void
  {
   if( _name != value)
   {
    _name = value;
   }
  }
  private var _age:uint;
  public function get age():uint
  {
   return _age;
  }
  public function set age(value:uint):void
  {
   if( _age != value)
   {
    _age = value;
   }
  }
  private var _innerObject:TestInnerObject;
  public function get innerObject():TestInnerObject
  {
   return _innerObject;
  }
  public function set innerObject(value:TestInnerObject):void
  {
   if( _innerObject != value)
   {
    _innerObject = value;
   }
  }  
  public function printName():void
  {
   trace(this.name);
  }
 }
}
Step2.點擊分析圖示,進入分析模式

Step3.選擇運行的程式,並製造快照(momory snapshot)









Step4.雙擊製造出來的快照







點擊後可以看到內存快照的窗口(memory snapshot view)










我們可以看到我們在Application中建立的TestInnerObject與TestObject。
  • 實例數(Instances):指物件在應用程式中目前存在的數量。



而若是在活動對象窗口(Live Objects view)中,則有點不同,會有一項累積實例數(Cumulative Instances)。








  • 累積實例數(Cumulative Instances):指物件在程式中被建立了幾次。
而在我們程式範例中,TestObject的確被new了三次,但只有兩個實體被變數參照起來,因此在實例數(instances)欄位中只有2個。

Step5.在memory Sanpshot View中雙擊TestObject以便打開Object References view觀察TestObject的被參照狀況

Click


可以看見Object References View








點擊窗口內的物件可以看到是誰參照到物件本身,以及物件內部屬性狀況等等







可以看見第二個物件是被hero的_t2所參照,而hero其實就是Application本身的實體,也就是topLevelApplication。

其餘操請參考官方文件:

沒有留言:

張貼留言