2012-01-06 2 views
3

방금 ​​실수 한 디버깅 시간을 보냈다. (할당하지 않은 변수를 풀었다.) 다음에 XCode의 분석에서 경고 메시지를 표시하는 방법이 있는지 궁금해했다. 코드는 다음과 같습니다.메모리 관리 - 버그를 일찍 찾는다

@synthesize alfa, beta; 
… 
NSString *temp1 = [[NSString alloc] initWithString:@"AlfaText]; 
self.alfa = temp1; 
[temp1 release]; 

NSString *temp2 = @"BetaText"; 
self.beta = temp2; 
[temp2 release] 

마지막 문장은 (분명히?) 버그입니다. Analyze는 당신이 [release]를 너무 적게 가지고있을 때보고하는 좋은 일을하는 것처럼 보입니다. 너무 많은 것을 분석 할 수있는 것처럼 보입니다. 내가 실종되었다는 것을 입증 할 수있는 것이 있습니까?

+0

예, 마지막 문은 버그이지만 아무것도 중단하지 않습니다. 문자열 상수는 'INT_MAX'의 보유 수를 가지며'-retain','-release' 및'-autorelease' 메시지는 no-ops로 대체됩니다. –

+0

하지만 temp2가 NSString이 아닌 NSArray 인 경우에는 손상 될 수 있습니다. – Andrew

답변

3

정적 분석기가이를 감지하지 못하면 버그를 신고하십시오. 정말 있어야합니다.

ARC를 사용하도록 프로젝트를 변환하는 경우 컴파일러가 수행하는 더 나은 분석과 결합하여 쓰기/쓰기 해제가 모두 부족하면 메모리 관리 버그가 훨씬 줄어 듭니다.