나는 그 차이를 알고 있다고 생각하지만 정확하게 설명하는 방법을 모른다.[myVar dealloc]과 [myVar release]의 차이점을 가장 잘 설명하는 것은 무엇입니까?
dealloc은 해당 변수가 예약 한 메모리를 완전히 그리고 즉시 제거합니다.
릴리스는 해당 변수의 메모리의 보유 카운터를 -1 감소시킵니다. 1이면 0, 그래서 그 순간에 dealloc과 같은 효과가 있습니다.
맞습니까? 또는 더 나은 짧은 설명이 있습니까?
나는 그 차이를 알고 있다고 생각하지만 정확하게 설명하는 방법을 모른다.[myVar dealloc]과 [myVar release]의 차이점을 가장 잘 설명하는 것은 무엇입니까?
dealloc은 해당 변수가 예약 한 메모리를 완전히 그리고 즉시 제거합니다.
릴리스는 해당 변수의 메모리의 보유 카운터를 -1 감소시킵니다. 1이면 0, 그래서 그 순간에 dealloc과 같은 효과가 있습니다.
맞습니까? 또는 더 나은 짧은 설명이 있습니까?
정확하게 맞습니다.
개체를 사용할 때 보유 개수가 무엇인지 모르기 때문에 dealloc
을 사용하지 마십시오. 당신도 신경 쓰지 않아요. release
에 전화하여 더 이상 필요가 없다고 말하면됩니다. 그리고 일단 아무도하지 않으면 객체는 dealloc
을 호출합니다.
모두 맞지만, 당신이 놓친 핵심 포인트는 절대로 dealloc을 호출해서는 안된다는 것입니다. 여기에 NSObject의의의 dealloc 방법에 대한 애플의 문서에서 일부 정보는 다음과 같습니다
이(http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/nsobject_Class/Reference/Reference.html#//apple_ref/occ/instm/NSObject/dealloc에서) 당신은 직접 할당 해제의 메시지 를 전송하지 않습니다. 대신, 개체의 dealloc 메서드는 릴리스 NSObject 프로토콜 메서드 을 통해 간접적으로 호출됩니다 (릴리스 메시지의 결과로 수신기의 보유 계수가 0이되는 경우). 에 대한 자세한 내용은 메모리 관리 프로그래밍 코코아 가이드를 참조하십시오.
서브 클래스는 데이터 의 객체 등 동적으로 할당 된 저장에 의해 소비 추가 메모리 의 방출을 허용하거나 할당 취소 된 객체에 의해 소유 인스턴스 변수를 객체에 할당 해제의 자신의 버전을 구현해야합니다. 클래스 별 해제를 수행 후, 서브 방법 슈퍼에 메시지를 통해 수퍼 버전을 할당 해제의 을 포함한다 :
덕분. 나는 조금 혼란스러워한다고 생각합니다 ... 그래서 하위 클래스의 dealloc 메소드 내부에서 인스턴스 변수를 dealloc해야합니까? 즉 - (void) dealloc { \t [yellowViewController dealloc]; \t [blueViewController dealloc]; [super dealloc]; } – Thanks
슈퍼를 제외하고 결코 dealloc을 호출하지 마십시오. Thanks 'dealloc 메소드의 올바른 구현은 다음과 같습니다. - (void) dealloc {[yellowViewController release]; [blueViewController release]; [슈퍼 dealloc]; } – rpetrich
당신이 읽고있는 것을 보았습니다. iPhone 3 개발 시작 - SDK 탐색 (저는 노란색/파란색보기 컨트롤러 프로젝트도 인식했습니다). – mk12