2011-09-10 3 views
0

나는이 개체를 해제 처리하는 방법을 잘 모르겠어요 내가 받고있어 :잘못된 감소는

참조 카운트가 잘못 감소 함 발신자

[self.imageView release]; 라인이 오류 점에서이 시점에서 소유하지 되는 오브젝트의.

+1

그 라인은 완전히 불필요합니다. – hop

답변

4

전화 번호는 nil입니다. self.imageView=nil; (imageView를 해제하고 nil로 설정) 또는 [imageView release]; (이미지보기 만 해제하지만 더 이상 사용하지 않으므로 nil으로 설정하지 않아도 됨)을 제거하십시오.

편집 :

self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; 

당신이 대신 다음과 같이 호출한다 :

self.imageView = [[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)] autorelease]; 
+2

그는'self.imageView'를 유출하고 있습니다.'-initWithFrame :'은 소유하는 객체를 'retain' 속성에 반환합니다. –

+0

답변에 추가하려면 dealloc 메소드에서 nil로 설정해야합니다. 'self.imageView = nil;' –

+0

해제 후 nil로 설정하면 OK입니다. 하지만 릴리즈하기 전에 이것을 없앨 수는 없습니다 ... – Mohammad

0

의 코드를 수정 문제를 석방을 방지하고 누출 위해 @Bavarious으로 여기에 누수가있다 고 말했다 dealloc 같은 메소드.

-(void)dealloc 
{  
    [imageView release]; 
    self.imageView = nil; 
    [super dealloc]; 
} 

문제가 해결되었습니다. 당신의 dealloc 방법의 두 가지 버그가있어

+0

나는 당신을 위해 형식을 개선하는 자유를 누렸다. [Markdown Editing Help] (http://stackoverflow.com/editing-help)를 참고하십시오. – albertamg

0

:

(1) 당신은 당신의 dealloc에 ​​마지막 라인으로 [super dealloc]을 넣어해야

당신은 당신의 개체가 의지에 [super dealloc] 첫째, 메모리를 호출하는 경우 해방 될 수있다. 그 후에는 개체의 멤버를 사용할 수 없으며 더 이상 자신의 것이 아닙니다!

(2) dealloc 메소드에서 속성을 사용하지 않는 것이 좋습니다. 당신은 다른 일이 일어날 원인을 알지 못합니다 (다른 객체는 KVO를 통해 듣고 있을지도 모릅니다. 서브 클래스가 다른 일을하도록 setter를 재정의했을 수도 있습니다).

올바른의 dealloc은 다음과 같은 모양입니다 : 도움이

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

희망을!

+0

dealloc에서 속성을 사용할 수 없다는 것을 어디에서 알았습니까? –

+0

여기 : http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.html#//apple_ref/doc/uid/TP40004447-SW1 - '돈'섹션 t 이니셜 라이저 메소드에서 접근 자 메소드를 사용하고 ' – deanWombourne

+0

dealloc하지만 그들은 realloc을 거기서 자세히 설명하지 않으므로이 스레드도 꽤 흥미 롭습니다. http://www.cocoabuilder.com/archive/cocoa/242096-avoiding-kvo- in-dealloc.html – deanWombourne