2011-09-08 8 views
3

다차원 NSMutableArray을 설정하려고합니다. 처음에 모든 위치를 으로 설정하고 객체를 다른 [NSNumber numberWithInt:4] (예 :)으로 바꿉니다. 완료되면 배열을 다시 작성하고 싶습니다. 나는 [array release]라고 말하는 것이 맞습니까? 그게 모든 NSNumber 개체를 출시 할 예정입니까? 아니면 먼저 모든 객체를 0으로 설정하는 등 더 많은 메모리 관리를해야합니까?NSMutableArray를 사용한 메모리 누수

답변

2

배열을 해제하고 다시 생성하거나 약간 더 효율적으로 배열의 -removeAllObjects을 호출하면됩니다. 그것을 채우는 NSNumber 객체는 자동으로 릴리즈되므로 어레이를 추가 할 때 배열의 소유권을 가져 와서 배열 자체가 해제되거나 내용이 제거 될 때 배열을 해제해야 할 책임이 있습니다.

+0

완벽하게 작업 해 주셔서 감사합니다. – Ben

2

개체 배열을 해제 할 때뿐만 아니라 개체를 추가/바꾸기 및 제거 할 때 배열에서 NSNumber을 올바르게 유지하고 해제합니다. 그래서 네가 맞다. 자동 완성 된 객체를 반환하는 NSNumber 편의 생성자를 사용하고 있기 때문이다.

1

철학적으로, 유지 및 해제와 관련하여 NSArray이하는 일을 알고 있거나 신경 쓰지 않아야합니다. 그것의 계약 범위는 addObject:/etc가 배열에 객체를 넣고 objectAtIndex:/etc가 같은 객체를 반환한다는 것입니다. 객체를 어레이에 배치 한 후에도 계속 소유해야하는지 여부는 전적으로 자신의 요구 사항에 따라 고려해야합니다. NSArray은 전적으로 자체 메모리 관리를 담당합니다.

NSArray의 경우 내부적으로 보유 및 릴리스를 관리하는 방법은 잘 알려져 있으며 문자 그대로의 질문은 이미 노아와 조가 대답했습니다. 그러나 결코 특정 구현이있는 다른 객체에 의존해서는 안됩니다.

+0

NSArray가 해당 요소를 유지하고 해제한다는 것이 명시 적으로 설명되어 있습니다. http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Collections/Articles/Arrays.html 계약서의 일부로, 배열을 사용하여 동적 번호를 소유 할 수 있다는 이점이 있습니다. 각 개체를 사용자가 보유하고 릴리스하지 않고도 구체화되지 않은 구현 세부 사항에 의존하지 않고도 (이 모든 것은 사전 [키 복사, 객체 유지] 및 설정에 사용됩니다.) –