viewDidLoad과 의 차이점은 무엇입니까 viewDidAppear? 이러한 함수에는 어떤 종류의 초기화 또는 사용자 지정 코드가 포함됩니까?
예 :에 presentModalViewController있을 때만 작동 viewDidAppear하고 켜져 있지 않을 때만 작동합니다 viewDidLoad.
viewDidLoad과 의 차이점은 무엇입니까 viewDidAppear? 이러한 함수에는 어떤 종류의 초기화 또는 사용자 지정 코드가 포함됩니까?
예 :에 presentModalViewController있을 때만 작동 viewDidAppear하고 켜져 있지 않을 때만 작동합니다 viewDidLoad.
답변:
viewDidLoad뷰 컨트롤러가 메모리에 처음로드 될 때 정확히 한 번 호출됩니다. 여기에서 인스턴스 변수를 인스턴스화하고이 뷰 컨트롤러의 전체 수명주기 동안 유지되는 뷰를 빌드 할 수 있습니다. 그러나 일반적으로이 시점에서는보기가 아직 표시되지 않습니다.
viewDidAppear뷰가 실제로 표시 될 때 호출되고 뷰 컨트롤러의 수명주기 동안 여러 번 호출 될 수 있습니다 (예 : 모달 뷰 컨트롤러가 해제되고 뷰가 다시 표시 될 때). 여기에서 레이아웃 작업을 수행하거나 UI에서 그리기를 수행 할 수 있습니다 (예 : 모달 뷰 컨트롤러 표시). 그러나 여기서하는 모든 작업은 반복 가능해야합니다. 여기에 항목을 유지하지 않는 것이 가장 좋습니다. 그렇지 않으면 뷰가 사라질 때 해제하지 않으면 메모리 누수가 발생합니다.
참조 : https://developer.apple.com/documentation/uikit/uiviewcontroller
viewDidLoad일반적으로 한 번만 호출 되지만 다시 호출 될 수있는 상황이 하나 있습니다. 특히를 수신하면 didReceiveMemoryWarning보이지 않는 뷰가 해제 될 수 있으며 (뷰 컨트롤러는 변경되지 않았음에도 불구하고) 돌아올 때 viewDidLoad다시 호출 될 수 있습니다.
didReceiveMemoryWarning. 하지만를 작성할 때 좋은 관행을 사용한다면 viewDidLoad괜찮을 것이라는 데 동의 합니다. 내 유일한 요점은 ivars 및 수동 메모리 관리를 부주의하게 사용하면 viewDidLoad. 사람들은 didReceiveMemoryWarning그에 따라 시나리오와 프로그램에 민감해야합니다 .
간단히 말해서에서 컨트롤이나 배열을 만들고 싶을 것입니다 viewDidLoad.에서와 같이 viewDidAppear해당 컨트롤이나 배열을 새로 고치려는 위치입니다.
viewDidLoad컨트롤러가 생성 될 때 한 번 viewDidAppear호출되고 뷰, 음, DID가 나타날 때마다 호출됩니다. 따라서 표시하는 모달 뷰가 있다고 가정하면 해당 뷰가 닫힐 때 viewDidAppear호출되고 viewDidLoad호출되지 않습니다.
viewDidLoad 될 수 있습니다 . 표시되지 않은 뷰 (다른 뷰 스택 아래)가 메모리 부족 상황에서 이전 버전의 iOS에서 언로드 된 경우 뷰 컨트롤러는 화면에 다시 표시해야 할 때 뷰를 자동으로 다시로드합니다. 이후 버전의 iOS에서는 이전 iOS가 수행 한 작업을 수행하여 메모리 사용량을 줄이는 데 도움이되도록 선택할 수 있습니다. 메시지가 도착하면 오프 스크린보기를 언로드합니다. 이 경우 다시 호출됩니다. didReceiveMemoryWarningviewDidLoad