참조하기 전에 반환 된 사전이 할당 취소되기 때문에 첫 번째 경우에 오류가 발생합니다. 해당 -release
이없는 -retain
이 있기 때문에 두 번째 경우에 메모리 누수가 발생합니다.
개체를 반환하는 대부분의 메서드는 autorelease
개체를 반환합니다. 이렇게하면 현재 실행 루프가 끝날 때까지 객체가 유지되지만 그 시점에 객체가 해제됩니다 (즉, autorelease
의 기능).
data = [[class method] retain];
을하지만 당신은 객체를 유지 한 후, 그것을 해제하는 것은 귀하의 책임입니다 : 현재 실행 루프를 넘어 살아있는 개체를 유지하려는 경우, 당신은 그것을 유지해야합니다. 객체의 인스턴스 변수의 경우,이 작업을 수행 할 수있는 권리 시간 -dealloc
에 보통 : 이제
-(void) dealloc {
[data release];
}
, 당신은 또한 다른 값으로 data
을 덮어 쓸 경우, 당신은 또한 확실히 그 이전 값을해야 알고 있어야합니다 제대로 풀려나. 이것은 속성을 사용하는 장점 중 하나입니다. 컴파일러가이 일을 처리하는 함수를 작성할 수 있습니다. 당신의 재산은
self.data = newvalue;
것) release
이전 값, b)는 retain
새 값으로 값을 설정보다 retain
재산이며, c)는 새 값으로 인스턴스 변수를 설정합니다. 그래도 개체가 파괴되면 dealloc
에서 값을 공개해야합니다.
'[super dealloc];을 잊지 마세요. 정치적으로 정확합니다. :) –
사실, [super dealloc]은 항상 좋은 생각입니다. –