[super dealloc]
을 호출하고 수퍼 클래스에서 IMP를 가져 와서 호출하는 것의 차이점은 무엇입니까?[super dealloc] 호출과 수퍼 클래스의 메소드 구현 호출의 차이점
Method deallocMethod = class_getInstanceMethod([self superclass], @selector(dealloc));
IMP superImp = method_getImplementation(deallocMethod);
((void (*)(id, SEL))superImp)(self, _cmd);
내가 사용하는 용도에 따라 두 가지 다른 동작이 나타납니다. UIViewController 동적 하위 클래스에서이 다른 동작을보고 있습니다.
편집 :
이 정교합니다. ARC를 사용하지 않습니다.
또한 동작의 차이점은 설명하기 어렵지만 최선을 다할 것입니다. UIViewController가 dealloc에서 수행하는 일부 정리가 수행되지 않는 것처럼 보입니다. [super dealloc] 만 호출하면 할당 해제 된 뷰 컨트롤러의 인스턴스로 메시지가 전송됩니다. 이것은 UIViewController (+ [UIViewController setViewController : forView :])의 정적 함수에서 뷰 (뷰에 대한 뷰 컨트롤러의 해시가 커지기 때문에 발생합니다)가 발생합니다. 내 생각 엔보기 컨트롤러가 해시에서 제거되지 않는 경우에만 [super dealloc]
을 호출합니다.
ARC를 사용하는 경우 모든 베팅이 해제됩니다. –
행동의 차이점은 무엇입니까? 증상이 무엇인지 알면 쉽게 설명 할 수 있습니다. –
방금 동작 차이에 대한 설명을 추가했습니다. 나는 정확히 무엇이 다른지 100 % 명확하지 않다. 여기에 대한 답변이 나에게 힌트를 줄 수 있기를 희망했지만 나는 그것을 설명하기 위해 최선을 다했다. – drewag