2012-05-27 2 views
2

직접 설명하려고합니다. Person 오브젝트와 인 싱글 톤 오브젝트 PeopleManager이 있습니다.
_peoplepersonId을 키로 사용하여 Person 개의 개체를 보유하고있는 사전입니다. 사람이 만든 Objective c - NSDictionary 유지 객체 문제

내가합니다 ( Person init 방법)에 _people 사전에 ( self)를 추가

사람의 dealloc이지만, 문제가 될 때까지 사람 개체를 유지해야하는 사람들이 사전의 경우 그 그 사람을 내 코드에 할당 한 다음 해제하면 PeopleManager이 여전히 _people 사전에 있기 때문에 dealloc을 얻지 못합니다.

실제로 문제는 _people 사전이 사람을 유지한다는 것입니다. 할당 사전을 사용하는 것이 가능했다면 좋겠지 만 가능하지는 않습니다.

이 문제를 해결하려면 어떻게해야합니까?

+0

어떻게 추가하는 객체를 사용으로 전달되는 개체를 제거 할 수있을 것인가? 그것은 변경할 수 없으므로 수정할 수 없습니다. –

답변

3

사전은 사람을 사용하고 있기 때문에 보유해야합니다. 이것이 발생하지 않는다면, 사전은 객체가 항상 살아 있다는 것을 보장 할 수 없습니다.

Person이 더 이상 필요하지 않게되고 dealloc 될 것으로 예상되면 Person을 해제하고 [NSMutableDictionary -removeObjectForKey:]을 통해 사전에서 제거하여 보유 수를 감소시킵니다. NSDictionary에서 객체를 제거 할 수 없기 때문에 NSMutableDictionary를 사용해야합니다.

1

이있는 NSDictionary의 가변 대응을 사용하는 경우, 당신이있는 NSDictionary에 대한 간단한 -removeObjectForKey: