2009-11-08 6 views
0

있는 NSURLConnection *이 연결NSURLConnection 누수 - 이유가 무엇입니까?

@property (nonatomic, retain) NSURLConnection *connection; 

계기가 나는 아래의 코드의 두 번째 줄에있는 NSURLConnection 개체를 유출하고있어라고보고하고있다 클래스의 속성입니다. didFinishLoadingdidFinishWithError 위임 선택기에서

NSURLRequest *request = [[NSURLRequest alloc] initWithURL:_url]; 
self.connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
[request release]; 

, 나는 연결을 해제하고 나는 "NSURLConnection leak?" 후 여러 다른 사람을 읽었습니다 전무

[self.connection release]; 
self.connection = nil; 

로 설정하고있다. 나는 완전히 명백한 것을 놓치고있는 것처럼 느껴진다. 도움?

+0

속성이 유지되었으므로 속성에 할당 한 직후에 연결을 해제하지 않으시겠습니까? – falstro

답변

3

roe의 의견에 따르면 연결 (할당 개수 1 보유)을 할당 한 다음 연결 등록 정보 (보유 개수 2 보유)로 다시 보유합니다. 델리게이트 선택자에서만 한 번만 출시됩니다. 두 가지 옵션이 있습니다.

1) 연결 속성을 유지하지 말고 할당하도록 변경하십시오. ALLOC 및 릴리스가 함께 가까운 때문에 누출 기회의 적은 있기 때문에 선호된다

NSURLRequest *request = [[NSURLRequest alloc] initWithURL:_url]; 
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
self.connection = connection; 
[connection release]; 
[request release]; 

옵션 2 : 당신의 연결 속성에 의해 유지 된 후

@property (nonatomic, assign) NSURLConnection *connection; 

// OR, since assign is the default you may omit it 

@property (nonatomic) NSURLConnection *connection; 

2) 할당 된 객체를 해제 가능한 한. 또한 이전 연결을 해제하는 것을 잊어 버린 경우 합성 메서드는 이전 연결을 해제합니다. dealloc에서 self.connection을 릴리즈하는 것을 잊지 마십시오.

+0

대단히 감사합니다 !! – TomH

+0

죄송합니다. 나는 '알이 말한대로'라고 말하려고했습니다. 기꺼이 도와주세요. –

관련 문제