2012-03-19 2 views
1

경우 정수 복사 배열 (응?)

array1 = {7,8,9}; 

의 배열을하고 난 2darray라는 또 다른 배열에 추가합니다.

만약 내가 array1 릴리스 2darray 여전히 7,8,9 값을 가지고 또는 2darray에 array1을 복사하고 안전하게 array1을 릴리스하고 여전히 그 가치가 7,8,9에서 뭔가를해야 할 것입니다 2darray?

+0

원래 배열은 계속 존재합니다. 배열을 다른 배열에 "추가"하는 유일한 방법은 단순히 복사 할 배열을 배열에 복사하는 것입니다. 이것은 모두 문서를 기반으로합니다. –

+0

나는 그것이 배열을 어떻게 추가하는지에 달려 있다고 생각한다. 참조 또는 포인터를 추가하면 array1을 삭제하면 2darray에 영향을 미칩니다. 완전 복사를 수행하면 (즉, 모든 요소를 ​​복사하는 경우) array1은 부적합합니다. – Bill

+2

NSArray를 의미합니까? "정수"대신에 "NSNumber"를 의미합니까? 어느 쪽이든, 나는 Objective-C의 메모리 관리 가이드를 봐야한다고 생각한다. – mattjgalloway

답변

2

그래, 귀하의 질문은 서면으로 이해가되지 않습니다. 그래서 나는 몇 가지 가정을하고 당신이 바라는 바를 대답 할 것입니다.

우선 NSArray는 객체를 포함 할 수 있으며 코드에서 int와 같은 스칼라 값을 포함 할 수 없습니다. 의 대신 다음 코드를 살펴 보자, 당신은 배열에 객체를 추가 할 때

NSArray *array1 = [NSArray arrayWithObjects:[NSNumber numberWithInt:7], 
              [NSNumber numberWithInt:8], 
              [NSNumber numberWithInt:9], nil]; 
NSArray *array2 = [NSArray arrayWithObject:array1]; 
[array1 release]; 
array1 = nil; 

, 그것은 자동으로 유지를하는 array1 (포인터 한 번 유지에 가리키는하는 array1 배열이 경우 너무), 두 번째로 array2 (retainCount가 2)가됩니다.

해제하면 하나만 보유 (retainCount가 1이됩니다)하므로 개체 자체가 절대로 해제되지 않고 유효합니다.

이 방법은 배열을 만들어 두 번째 장소에 추가하는 일반적인 방법입니다. array1을 "안전하게"풀어 놓았고 array2에있는 객체에 영향을주지 않고 nil로 설정할 수 있습니다.

+0

감사합니다. 정확히 내가 궁금해하는 것이 었습니다. –