문제

nsurlConnection *연결은 클래스의 속성입니다

@property (nonatomic, retain) NSURLConnection *connection;

Instruments는 아래 코드의 두 번째 줄에서 nsurlconnection 객체를 누출한다고보고합니다.

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

에서 didFinishLoading 그리고 didFinishWithError 선정자 대의원, 나는 연결을 공개하고 nil로 설정하고 있습니다.

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

나는 그것을 읽었다 "nsurlconnection 누출?" 게시물 및 기타 여러 가지. 나는 완전히 명백한 것을 놓친 것 같은 느낌이 든다. 돕다?

도움이 되었습니까?

해결책

Roe의 의견이 말했듯이, 연결을 할당 한 다음 연결 속성 (Count 2)과 함께 다시 유지하는 것입니다. Delegate Selectors에서 한 번만 출시합니다. 두 가지 옵션이 있습니다.

1) 연결 속성을 유지하지 않고 할당하도록 변경하십시오.

@property (nonatomic, assign) NSURLConnection *connection;

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

@property (nonatomic) NSURLConnection *connection;

2) 연결 속성에 의해 유지 된 후 할당 된 객체를 해제하십시오.

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

Alloc과 릴리스가 가능한 한 가깝기 때문에 누출 가능성이 적기 때문에 옵션 2가 선호됩니다. 또한, 이전 연결을 해제하는 것을 잊어 버리면 합성 된 방법이 이전 연결 방법을 해제합니다. Dealloc에서 self.connection을 해제하는 것을 잊지 마십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top