2011-05-14 5 views
1

난 그냥 내 프로젝트에 연타하다 정적 분석기를 실행 호출자가이 시점에서 소유하지 않은 객체의 참조 횟수를 잘못 감소, 나는 다음과 같은 경고 수신하고 있습니다 :CSA 경고 :

Incorrect decrement of the reference count of an object that is not owned at this point by the caller

내 문제가 무엇인지 말해 주실 수 있습니까? 나는 보통 내 애플 리케이션에서 사용되는 메모리를 잘 관리 할 수있다.

self.cupboardViewController = [[CupboardViewController alloc] initWithNibName:@"CupboardViewController" bundle:[NSBundle mainBundle]]; 
[self.window addSubview:self.cupboardViewController.view]; 

- (void)dealloc { 
    [[self cupboardViewController] release];//where I am getting the warning. 
    [super dealloc]; 
} 
+2

'cupboardViewController'가'retain'으로 표시되었다고 가정하면, 예제의 첫 번째 줄에 생성 한 새 객체가 자동으로 유지되므로 관계없이이 객체를 유출하게됩니다. 속성에 속성을 할당하기 전에 해당 객체를 자동 갱신해야합니다. autoclease = "[[CupboardViewController alloc] init ...] autorelease];'. –

+0

그랬지만 잠시 후에 응용 프로그램이 충돌하는 원인이되었습니다. –

답변

3

속성이 아닌 인스턴스 변수를 공개해야합니다.

- (void)dealloc { 
    [cupboardViewController release]; 
    [super dealloc]; 
} 
0

당신은 위의 코드에 self.cupboardViewController =을 설정 유지 속성이 당신의 dealloc에 ​​출시 그래서 문제는이 이상 유지 2.

의 유지 수를 생성로 cupboardViewController가 여전히 존재하는 경우 현저한 보유 및 이렇게 누출.

내가 사용하는 코드 표준

는 단순히 :

theProperty = [[NS* alloc] init]

나는 (하나는 유지 만들기) 내 재산을 ALLOC 때, 단지 내 dealloc 방법에서

[theProperty release];

.

나는이 속성을 참조하지 않는다는 점에서 일관성이 있으며, iVar 만 사용하여 이러한 문제를 계속 유지 및 해소합니다.