viewDidUnload가 더 이상 iOS6의 호출됩니다 호출하지 않습니다에 대한 응용 프로그램을 거부합니다 이런 이유로 애플이 거절 한거야? 시간 제약으로 인해 나는 그들을 거부 할 위험을 감수 할 수 없다.애플 그래서이 작업을 수행 한 viewDidUnload에서 몇 가지 필요한 일을 응용 프로그램에 대한 해결 방법으로, 수동으로 viewDidUnload
답변
거부 할 이유가 없습니다. 메소드를 비추천으로써, -[UIView viewDidUnload]
은 다른 어떤 메소드처럼 간단하게됩니다. 처음에는 UIView
에 존재하지 않는 것처럼 취급 할 수 있으며 방금 -viewDidUnload
이라는 메서드를 만들었습니다.
-viewDidUnload
여전히 (이 그것을 수도) 내부에 존재하고 당신이 당신의 자신의 대신 애플의 (지금 개인) 구현을 호출을 시도했지만 애플이 이런 짓을 했을까 내가보기 엔 의심 경우가 문제가 될 것입니다.
if ([[self superclass] instancesRespondToSelector:@selector(viewDidUnload)]) {
[super viewDidUnload];
}
당신이 정말로 당신이 할 수 안전하고 싶었다면 : 슈퍼 클래스가 현재 사용, 무슨 일을하는지의 경우 슈퍼에 전화하기 전에 방법을 구현하는 경우 그냥 물어 기억하는 당신의 -viewDidUnload
에 기억 항상 다른 방법으로 코드를 이동하십시오. viewDidUnload
내부 단지에서 iOS 5 장치에 대한 새 메서드를 호출하고 당신이 아이폰 OS 6에 있다면 -didReceiveMemoryWarning
에 새 메소드를 호출이 아니었다 이후이 didReceiveMemoryWarning의 논리에 길이 언급을하지 않을거야
질문에서 컨트롤러를 넣는 상태에 대해 매우 신중해야한다고 말할 것입니다. if 문이 모든 기반을 커버하는지 확인하십시오. 물론 뷰 컨트롤러와 뷰를 기대할 수는 없습니다. viewDidUnload가 iOS 5의 UIKit에 의해 호출되었을 때와 같은 상태에 있어야합니다.
이유는 없지만 Apple은이를 거부합니다.
수동으로 호출하는 것은 문제를 묻는 것입니다. 응용 프로그램 논리를 올바르게 가져와 "올바른"방식으로 수행하는 것이 좋습니다.
편집 : 해당 코드를 다시 살펴본 후 심각한 문제가 발생합니다. 호출 선택자 (우리는 이미 주 스레드에 있어야합니다!)와 수퍼 뷰 (그것을 말하지 않고 소유자의 뷰를 훔치는)에서 제거하는 것은 모든 것이 정확하지 않을 수 있습니다. 이것은 코드 기반에서 정말로 제거하고자하는 코드 유형입니다.