누군가에게 빛을 발할 수있는 이상한 상황이 있습니다. 사용자 지정 개체에 NSCoding
프로토콜을 구현 중이며 initWithCoder:
의 메모리 누수가 발생합니다. 나는 이런 식으로 뭔가가 :이 객체의 다른 속성을 많이 가지고decodeObjectForKey를 사용하는 동안 retainCounts를 이해합니다.
NSString* titleTemp = [aDecoder decodeObjectForKey:@"title"];
if(titleTemp) {
[self setTitleString:titleTemp];
} else {
[self setTitleString:[NSString string]];
}
을, 일부는 배열, 일부 문자열 및 일부 프리미티브 (복식의 int는)이고, I는 지속적으로이 방법으로 메모리 누수를 얻고있다. Instruments는 누출이 decodeObjectForKey:
행의 각 디코딩에서 발생한다고 알려줍니다. 10 개 이상의 객체로 이루어진 배열에서 각 사용자 정의 클래스 내에있는 모든 디코딩 된 객체 하나가 누설되면 메모리가 더해 집니 다.
그러나 정말 난처한 상황에 빠진 것은이 코드의 출력이이었다 :
NSString* titleTemp = [aDecoder decodeObjectForKey:@"title"];
NSLog(@"%i", titleTemp.retainCount);
은 "3"입니다!
와아, 모든 보유자는 어디에서 왔습니까? 나를 때려. 그러나 나는이 모든 누출을 알고 싶다. 감사!
비슷한 질문에 대한 답을 다시 읽는 동안, 나는 'dealloc'에 내 모든 '보유'속성을 공개하지 않는다는 것을 깨달았습니다 (duh!). 그래서 당신은 옳았습니다. 저는 단순히 저의 보유/발표의 균형을 맞추지 않고있었습니다. 자야겠다. 시간 내 줘서 고마워. –