내용 보기

작성자

관리자 (IP : 172.17.0.1)

날짜

2020-07-09 05:14

제목

[FLEX] FLEX에서의 Call by Value & Call by Reference


Flex에서 값을 할당할 때,

Call by Value 방식으로 값을 전달합니다.

그러나 ArrayCollection의 경우에는 Call by Reference 방식으로 값을 전환합니다.

제가 개발하는 요건중에 ArrayCollection 1을 다른 ArrayCollection 2에 복사(할당)하고,

ArrayCollection 2를 수정하는 경우가 있었습니다.

그런데 ArrayCollection 1도 동일하게 변경이되길래 디버그 모드에서 보니 두 객체의 주소가 동일하더군요.

어렵사리 구글링을 통해서 

Call by Value 방식으로 구현하는 해법을 알아냈습니다.

예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import mx.collections.ArrayCollection; 
import flash.utils.ByteArray;
 
private function clone(source:Object):* 
    var myBA:ByteArray = new ByteArray(); 
    myBA.writeObject(source); 
    myBA.position = 0
    return(myBA.readObject()); 
}
 
 
private function init():void
    var data:Array = [{name:"one",value:1},{name:"two",value:2}]; 
    var a:ArrayCollection = new ArrayCollection(data);
    
    var b:ArrayCollection = clone(a);
    b.getItemAt(0).value = "foo"
 
    trace(a.getItemAt (0).value); 
    trace(b.getItemAt(0).value); 
}
cs


출처1

출처2