2010-01-16 4 views
1

NSTimeIntervall 및 NSDate가있는 이상한 메모리 누수가 있습니다. 여기 내 코드는 다음과 같습니다.NSTimeInterval 메모리 누수

NSTimeInterval interval = 60*60*[[[Config alloc] getCacheLifetime] integerValue]; 
NSDate *maxCacheAge = [[NSDate alloc] initWithTimeIntervalSinceNow:-interval]; 

if ([date compare:maxCacheAge] == NSOrderedDescending) { 
    return YES; 
} else { 
    return NO; 
} 

날짜는 단지 NSDate 객체입니다. 인스 트루먼 트는 "간격"누출,하지만 난 아직 이해가 안돼, 어떻게 내가 아닌 개체를 공개 할 수 있습니까? 이 함수는 내가 여기에 게시 한 코드 스 니펫 후에 끝나기 때문에, 필자의 이해 구간에서는 자동으로 할당 해제되어야한다.

고마워요! 같은 문제가 건너 경우에 문제가 발견

답변

4

아마 누수가 줄에 무슨 일이 일어나고 있음을 말하고있다 :

것은 내가 그것을 여기에 멋진 솔루션 덕분에 얻었다.

[[[Config alloc] getCacheLifetime] integerValue]이 문제입니다.

우선 개체를 만드는 데 관심이 있지만 (alloc 호출) release 또는 autorelease을 호출하기 전에이 참조를 잃어 버려 누수가 발생했습니다.

또한 개체를 할당 한 직후 init 메서드를 호출해야합니다. Config 클래스가 특별한 작업을 수행하지 않더라도 NSObjectinit 메서드를 호출해야합니다.

당신이

Config *config = [[Config alloc] init]; 
NSTimeInterval interval = 60*60*[[config getCacheLifetime] integerValue]; 
[config release]; 

그 누출과 그 라인을 교체 할 경우 최대 연결해야합니다.

또한 maxCacheAge 개체가 누출됩니다. if 문 앞에는 [maxCacheAge autorelease];을 삽입하여 수정해야합니다.

+0

안녕하세요, 솔루션 주셔서 감사합니다! 이제 간격이 누출되는 이유도 알았습니다. 나는 당신에게 해결책을 적용했고 그것이 효과가있는 것처럼 보였습니다. 아마 제 생각보다 훨씬 낫습니다. – Robin

+1

또한이 누출 중 두 가지는 계측기를 실행할 필요없이 정적 분석기 (Xcode> 빌드> 빌드 및 분석)에 의해 감지된다는 점을 지적하고자합니다. – gerry3

0

은이 솔루션입니다 :

[[ClubzoneConfig alloc] loadConfigFile]; 
NSTimeInterval interval = 60*60*[[[ClubzoneConfig alloc] getCacheLifetime] integerValue]; 
NSDate *maxCacheAge = [[NSDate alloc] initWithTimeIntervalSinceNow:-interval]; 

if ([date compare:maxCacheAge] == NSOrderedDescending) { 
    [maxCacheAge release]; 
    return YES; 
} else { 
    [maxCacheAge release]; 
    return NO; 
} 

문제는 내가 그것을 소유로 maxCacheAge 객체가 해제받을 필요가있다 (아래 링크 참조) . iPhone Memory Management

+0

음,'[ClubzoneConfig alloc]'을 사용하는 방식이 잘못되었습니다. 더 많은 것을 위해 나의 대답을 보라. – benzado