0

autorelease를 사용하지 않고 NSMutableDictionay의 메모리를 수동으로 관리 할 것입니다. 그리고 mutableDictonary의 모든 개체가있는 NSArray, 내가 mutableDictionary 하나 개의 배열을 추가 할 때마다, 나는 내가 메모리에는 누수가 없다는 것을 ganrantee 수있는 방법,iOS의 NSMutableDictionary를 사용한 메모리 관리

NSArray *newArray = [[NSArray arrayWithArray:anArray] retain] 
[mutableDict setObject:newArray forKey:@"aKey"]; 

문제는 사용하는거야? dealloc에서 [mutableDict release]를 직접 사용하는 것이 좋습니다. mutableDict의 retainCount가 해당 객체 (retain 된 배열)의 모든 retainCounts의 합계와 같습니다. 당신이 할 수있는

답변

7
  1. ReferenceCocoa Memory Management Guide, 변명 읽기를 참조하십시오.
  2. 배열에 +1 이 있고 사전에 다른 +1이 있으므로 +1이 유지됩니다. 그건 누설이야. retain을 남겨두면 문제가 없습니다.
  3. dealloc에 사전을 올리는 것이 정확합니다. 사전에 대한 다른 강력한 참조가 없으면 할당 해제되어 그 안에 포함 된 모든 객체를 해제합니다. 즉, 배열이 할당 취소 될 것입니다. 이는 원하는 것일 수 있습니다.
  4. Forget about retainCount.
  5. 정말 잊어 버렸습니다 ... 무엇 이었습니까?
+2

5를 더합니다. 실제로 retainCount를 잊어 버리십시오. – vikingosegundo

0

:

NSArray *newArray = [NSArray arrayWithArray:anArray]; 
[mutableDict setObject:newArray forKey:@"aKey"];//mutableDict will auto retain newArray. 

, 당신은 당신의 프로젝트를 누설 얼마나 많은 참조 장치 (누설)를 사용할 수 있습니다.

+0

물론, setObject forKey 메서드가 자동으로 dictonary의 개체를 유지한다는 것을 알지 못했습니다. 그렇습니다. 감사. –

0

setObject가 이미 보유를 수행하므로 보유 할 필요가 없습니다. 원하는만큼 오래 유지할 수 있습니다.