2012-01-19 84 views
0
private var _variable:int; 

public function set variable(val:int):void{ 

     _variable = val; 

} 
public function get variable():int{ 

    return _variable 

} 

現在,如果我必須增加變量......哪一個更優化的方法呢?Actionscript 3.0 getter setter increment

__instance.variable++; 

__instance.variable = __instance.variable + 1; 

的原因的提問是,我已閱讀一個++比= A + 1 ;.更快即使使用吸氣劑和吸附劑,相同的原理是否也適用?

+0

@ sh4nx0r。剛剛接受了幾個答案。 – user418836

回答

3

不正常,他們將被轉換以同樣的方式,因爲在虛擬機中沒有任何特殊的操作碼做這個操作,虛擬機將不得不做這些操作:

  • 讀取變量值到寄存器
  • 增量寄存器
  • 放回值

現在是短且不易出錯寫__instance.variable++比第二種方式。

相反,當你增加一個局部變量var++時,它存在一個特殊操作(inclocal或inclocal_i(我代表整數)),它會直接遞增寄存器的值,所以它可以稍微快一點。

這裏例如AVM2操作碼的列表: http://www.anotherbigidea.com/javaswf/avm2/AVM2Instructions.html

0

據我知道有這兩者之間沒有漸變區別..

我讀了++比快=一個+ 1;

其實你的這個陳述是一個悖論。 由於編譯器(本例中是C編譯器)和解釋器認爲a ++爲a = a + 1,所以即使您編寫了++。它不會產生巨大的影響。

+0

我很確定這是不正確的。通常有一種操作可以特別增加或減少一個寄存器。這比CPU的快速「加法」和「減法」操作要快。 Flash虛擬機可能做類似的事情,但可能不屬於屬性的情況(僅適用於本地變量)。 –