IOS 개발을 살펴보기 시작했고 참조를 저장하지 않은 객체를 릴리스 할 때 몇 가지 의구심이 있습니다. " 바늘?" 즉시 생성 한 후 객체에 오토 릴리즈 메시지를 보내도록 제안하고, 그래서 나는 다음과 같은 코드 조각에 동일한 작업을 수행하려고 여기서오류 발생시 자동 생성 객체가 생성 된 후
int main(int argc, char *argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSURLResponse * response = nil;
NSError * error = nil;
NSData * data;
data = [NSURLConnection
sendSynchronousRequest: [[NSURLRequest requestWithURL:
[[NSURL URLWithString: @"http://www.google.it"]
autorelease]
] autorelease]
returningResponse: &response
error: &error];
[data writeToFile: @"/tmp/test.html"
atomically:NO];
[data release];
[pool drain];
return 0;
}
나는 아직 엑스 코드에서 프로그램을 실행하려고하지 수 ,하지만 리눅스에서 컴파일 해요 및 NSURLRequest 개체를 보낸 autorelease 메시지를 세분화 오류가 발생합니다 (나는 그것이 메시지 자체에 의해 원인이 아니라 개체를 풀어보십시오 autorelease 메시지로 인해 발생한다고 생각합니다) . NSURLRequest 객체에 보낸 autorelease 메시지의 문제점은 무엇입니까?
requestWithUrl과 같은 클래스 메소드의 참조 문서에서 "URL 요청을 생성하고 반환합니다"라고 말하면 사용을 마쳤을 때 객체를 릴리스해야한다는 의미입니다. ? 나는이 메모리 관리 규칙을 더 잘 이해하기를 원한다. 내 질문이 너무 바보가 아니길 바란다 .--)
어, 마지막 질문 하나만 : 오류와 데이터도 공개해야합니까? 동기식 요청에 의해 반환 된 객체?
도움을 주셔서 감사합니다.
즉각적인 답변을 보내 주셔서 감사합니다. 나는 그들이 autoreleased되었다고 의심, 이제 모든게 훨씬 명확 : 만약 내가 그것을 release (또는 나중에 autorelease 위해 그것을 표시해야합니다) 무언가를 할당, 내가 + requestWithUrl 같은 클래스 메소드를 사용하여 인스턴스를 만들면 (그 init 포함되지 않습니다/copy/new words) 어떤 이유로 든 그것을 보관하지 않으면 나는 그것을 풀어서는 안된다. –
@ 지아 니스, 정확히! :) – Vladimir