Вероятно, второй; но это зависит от того, что вы пытаетесь сделать.
Этот синтаксис:
<fx:Declarations>
...
<s:State name="state1" />
<s:State name="state2" />
<s:State name="state3" />
</fx:Declarations>
Создает три переменные внутри компонента класса State. Это было бы то же самое, что делать что-то подобное в ActionScript:
var myState1 : State = new State();
var myState1 : State = new State();
var myState1 : State = new State();
При создании состояний для компонента вы, вероятно, захотите сделать больше, чем просто создать состояние. Вы хотите назначить состояние как состояние текущего компонента.
Вот что на самом деле делает ваш второй синтаксис:
<s:states>
<s:State name="state1" />
<s:State name="state2" />
<s:State name="state3" />
</s:states>
Это создает три переменные состояния в виде массива и присваивает их свойству состояния компонента верхнего уровня. Концептуально так в ActionScript:
var myState1 : State = new State();
var myState1 : State = new State();
var myState1 : State = new State();
this.states = new Array();
this.states.push(myState1);
this.states.push(myState2);
this.states.push(myState3);
Вполне возможно, что компилятор выполняет некоторые действия над первым синтаксисом, чтобы создать эти экземпляры состояний и назначить их массиву состояний, но я не уверен. Я никогда не видел, чтобы кто-нибудь использовал этот синтаксис раньше. Я ожидаю, что оба подхода к компиляции. Я ожидал бы только, что второй подход фактически создаст состояния в компоненте, между которым вы можете переключаться.