Objective-C에서 변경 가능한 컨테이너에 저장된 개체를 수정하는 것과 관련하여 약간의 설명이나 조언이 필요합니다. 이라고하는 NSMutableArray
이 있고 그 중 에 대해 각각 country
에 대한 세부 정보가 저장되어 있다고 가정 해 보겠습니다.Objective-C 수정 가능한 요소가있는 컨테이너
NSMutableArray *countries = [[NSMutableArray alloc] init];
NSMutabelDictionary *country = [[NSMutableDictionary alloc] init];
[country setObject: @"United States" forKey: @"Name"];
[countries addObject: country];
나중에 내가 countries
에 저장된 country
수정할. 나는이 작업을 수행 할 수 있습니다으로 : 결과는 동일
:
[[countries objectAtIndex: 0] setObject: @"United States of America" forKey: @"Name"];
또는한다. 내 C++ 배경으로, 나는 처음에 cnt
이 countries
에 위치 0에있는 객체의 복사본이 될 것이라고 생각하고 수정 한 후에 수정 된 객체를 다시 countries
에 넣어야했습니다. 그러나 배열 countries
은 replaceObjectAtIndex
메시지를 보내지 않아도 업데이트 된 country
개체를 계속 보유합니다.
이러한 상황을 처리하는 방법에 대한 조언을 주시면 감사하겠습니다. 변경 가능한 컨테이너의 수정 된 객체를 새 컨테이너로 명시 적으로 대체하는 것이 더 낫지 않습니까? 아니면 완전히 필요하지 않습니까?
실제로 완전히 불필요합니다. 참조 : http://stackoverflow.com/questions/5915711/can-we-use-nsmutable-objects-as-members-of-a-non-nsmutable-class/5915831#5915831 –
Objective-C에는 기능이 없습니다. 값으로 전달하거나 C++ 에서처럼 시맨틱을 복사하십시오. –
좋아요. 배열'countries'에서'country'를 제거하면 어떻게 될까요? 'country' 사전을 배열에서 제거한 후에도 여전히 그것을 풀어 줘야합니까? 의견을 바탕으로 나는 이것을 가정했을 것이다. 그러나 이것을 시도했을 때 프로그램이 추락했다. – kadam