ryandayさんの指摘で、余分な3バイトは説明できませんが、いくつか注意点を...
ActionScript Design Patterns book も、荷物が多すぎるため、これを推奨していません。
ええ、115ページですが、それは間違っていると思い、その趣旨で正誤表を提出しました。
ActionScript 3 仕様では、「*」を使用すると、パッケージのすべての公開名がインポートされると規定されています。ヒットがあるので、
それは一種のことですが、解釈とヒットについては同意しません。「パッケージメンバーの名前が表示されます...」(完全に)。このコンテキストでは、コンパイルされた SWF 内では見えないように、コンパイラおよびエディタ ツールでメンバの名前を見えるようにすることを指しています。つまり、クラスが実際に使用されない限り (その型で宣言された変数)、クラスが SWF にコンパイルされるという意味ではありません。
これを別の見方をすると、手動でインポートできますflash.display.MovieClip
。ただし、MovieClip のインスタンスを作成しないと、MovieClip クラスは最終的な SWF にコンパイルされません。
自分自身を満足させるために、次の helloworld を 3 つの方法でコンパイルし、@secoif の提案に従ってリンクレポートを出力しました...
package
{
import flash.display.Sprite;
import flash.text.TextField;
public class ASHelloWorld extends Sprite
{
public function ASHelloWorld()
{
var tf:TextField = new TextField();
tf.text = "Hello World!";
addChild( tf );
}
}
}
まず、書かれているように、レポートをリンクします。
<report>
<scripts>
<script name="~/Documents/eclipse3.5carbonFbPlugin-FX4-LS10/ASHelloWorld/src/ASHelloWorld.as" mod="1278415735000" size="682" optimizedsize="344">
<def id="ASHelloWorld" />
<pre id="flash.display:Sprite" />
<dep id="AS3" />
<dep id="flash.text:TextField" />
</script>
</scripts>
<external-defs>
<ext id="AS3" />
<ext id="flash.text:TextField" />
<ext id="flash.display:Sprite" />
</external-defs>
</report>
次に、リンク レポート ファイルを削除し、インポートを次のように変更します。
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.text.TextField;
クリーン ビルドで、リンク レポートはまったく同じに見えます。同じサイズ、同じ最適化サイズ、同じリンク クラス。
3 番目に、リンク レポート ファイルを削除し、インポートを次のように変更します。
import flash.display.*;
import flash.text.*;
クリーン ビルドで、リンク レポートはまったく同じに見えます。同じサイズ、同じ最適化サイズ、同じリンク クラス。
いずれの場合も、Sprite クラスと TextField クラスのみが SWF に到達します。
ディスク上の実際の SWF ファイル サイズを見ると、3 つのバージョンでわずかな (1 または 2 バイト) の違いがあるように見えます。ryanday の投稿で言及されているより大きな SWF よりも悪くはありません。