문제

Objective-C에서 객체를 해제 할 때 (출시 수는 1이라고 가정 할 때) 해제 수는 0으로 감소되고 Dealloc 메소드가 호출됩니다. 물체가 바로 거기에 파괴 된 다음 [Super Dealloc] 이후에 수영장에 추가되어 수영장이 배수 될 때 파괴 되었습니까?

나는 Dealloc의 끝에서 릴리스 된 객체가 파괴되었다고 가정합니다 ([Super Dealloc]이라고 불렀을 때) AutorELEASE 변수가 풀에 추가 된 것을 알고 있습니다.

건배 -기세 -

도움이 되었습니까?

해결책

우선, 대상 c 프로그래밍 언어 메모리 관리 개념이 없습니다. 메모리 관리는 기초에 내장되어 있습니다 (Mac OS X 및 iPhone OS에 대한 Cocoa Touch 용 Cocoa의 일반적인 프레임 워크). Foundation은 구현하는 루트 클래스 nsobject를 추가합니다 alloc, retain, release 그리고 autorelease 편의 포장지 위에 class_createInstance() 그리고 object_dispose() Objective-C 런타임의 기능.

Objective-C는 메모리 관리 Agnostic이므로 쓰레기 수집을 추가하고 모든 메모리 관리 방법을 작성합니다. NSObject No-OPS는 매우 쉬웠습니다. 그러나 iPhone OS 및 Legacy Mac OS X에는 쓰레기 수집이 없으며 코코아에는 참조 계산 체계를 사용합니다.

호출 할 때 객체가 생성됩니다 alloc 수업 방법 NSObject 또는 NSProxy 재단에서. 이러한 기본 구현은 호출됩니다 class_createInstance() 수동으로 절대 필요하지 않습니다.

"죽음"을 할 때 dealloc 루트 클래스에서 실행됩니다 NSObject. 이것은 힙의 객체에 대한 메모리가 object_dispose(), 당신은 당신이 상속하는 한이 기능을 직접 호출 할 필요가 없습니다. NSObject 또는 NSProxy 재단에서.

AutorELEADERED 개체는 런타임에 관한 한 특별한 처리되지 않습니다. 자동 릴리스 물체는 다른 물체만큼 살아 있습니다. 당신이 일어날 일은 어떻게됩니다 autorelease 대상은 대략적으로;

-(id)autorelease; {
  [NSAutoreleasePool addObject:self];  // retain count +1
  [self release];                      // retain count -1
  return self;
}

부름 autorelease 유지 카운트를 줄이지 않으면 발신자에서 현재 자동 제출 풀로 객체의 소유권을 전송합니다. 나중에 현재 AutoreLease 풀이 사라지면 호출합니다. release 소유 한 모든 객체에 대해 더 이상 소유하지 않는 모든 객체가 릴리스됩니다.

다른 팁

예, 고정 계산이 0에 도달하자마자 거래됩니다.

AutorELEASE 시스템은 소유권이 약간 "모호한"물체를위한 것입니다. 즉, 소유하고 싶지 않은 신선한 물체를 반환하고 평생을 알 수없고 발신자가 취할 것이라고 가정하고 싶지 않습니다. 대한 책임. AutoreLease 풀이 배수되면 (일반적으로 런 루프 주변에서) 모든 구성원이 출시됩니다. 당신의 물건을받은 발신자가 그에 대한 책임을지고 싶다면 필요한 것은 그것을 유지하기 만하면 거래를 피할 수 있습니다.

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