2009-12-05 1 views
2

불변의 NSArray가 있고 여러 개의 하위 배열을 만들고 싶다고 가정 해 보겠습니다. 원본 배열에서 subarrayWithRange를 호출하고 새 NSArray를 가져올 수 있습니다. 새 복사본이 메모리 영역을 이전 복사본과 공유합니까?불변의 배열 (NSArray)에서 실행될 때 subarrayWithRange가 복사본을 생성합니까?

최악의 경우 원래 배열의 각 요소 (해당 요소로 시작하여 원래 배열의 끝에서 끝나는 부분)에 대한 하위 배열이 만들어지기 때문에 선형과 평방 메모리 사용 패턴.

+1

그런데이 질문은 위키가 아니었을 것입니다. – notnoop

답변

3

유감 스럽지만 Apple 구현은 오픈 소스가 아니므로 확실하게 말할 수는 없습니다. 그러나 간단한 테스트에서 하위 배열의 새 복사본을 만드는 것으로 보입니다.

네모가 정사각형 메모리 사용 패턴으로 이어질 수도 있지만, 경우에 따라서는 효율적입니다. 아주 큰 배열을 가지고 있고 작은 배열 만 필요하다고 가정 해보십시오. 부분 배열이 백엔드 배열을 다시 사용하면 큰 배열은 할당 취소되지 않습니다.

+0

나는 내 자신의 래퍼를 쓸 것이라고 추측한다. – DenNukem

+0

비슷한 문제가있어서 NSValue valueWithRange : 또는 NSIndexSet indexSetWithRange :를 사용하려고합니다. – trss

0

인스트루먼트를보고 하위 배열을 만들 때 할당 된 메모리 양을 확인하십시오.

관련 문제