UIViewController viewDidLoad 대 viewWillAppear : 적절한 분업은 무엇입니까?
나는 항상 서브 클래스 에서 viewDidLoad
vs.에 할당 해야하는 작업 유형에 대해 약간 불분명했습니다 .viewWillAppear
UIViewController
예를 들어 UIViewController
서버를 때리고 데이터를 가져 와서 뷰에 공급 한 다음 해당 뷰를 표시 하는 하위 클래스 가있는 앱을 만들고 있습니다. 이 일의 장점과 단점은 무엇입니까 viewDidLoad
대는 viewWillAppear
?
viewDidLoad는 한 번만 수행해야하는 작업입니다. 뷰가 나타날 때마다 viewWillAppear가 호출됩니다. UIDabel 텍스트 설정과 같이 viewDidLoad에서 한 번만 수행해야하는 작업을 수행해야합니다. 그러나 사용자가 볼 때마다보기의 특정 부분을 수정하고 싶을 수 있습니다. 예를 들어 iPod 응용 프로그램은 "지금 재생 중"보기로 갈 때마다 가사를 맨 위로 스크롤합니다.
그러나 서버에서 항목을로드 할 때 대기 시간도 고려해야합니다. 모든 네트워크 통신을 viewDidLoad 또는 viewWillAppear로 압축하면 사용자가보기를보기 전에 실행되어 앱이 잠시 정지 될 수 있습니다. 먼저 어떤 종류의 활동 표시기가있는 채워지지 않은보기를 사용자에게 표시하는 것이 좋습니다. 네트워킹이 완료되면 1-2 초가 걸리거나 실패 할 수도 있습니다. 데이터를 사용하여 뷰를 채울 수 있습니다. 이를 수행하는 방법에 대한 좋은 예는 다양한 트위터 클라이언트에서 볼 수 있습니다. 예를 들어 Twitterrific에서 작성자 세부 정보 페이지를 볼 때 네트워크 쿼리가 완료 될 때까지 "로드 중 ..."만 표시됩니다.
처음에는 tableView와 함께 ViewDidLoad 만 사용했습니다. Wifi가 손실 된 테스트에서 장치를 비행기 모드로 설정하여 Wifi를 반환해도 테이블이 새로 고쳐지지 않음을 알았습니다. 실제로 -Info.plist에서 백그라운드 모드가 YES로 설정된 홈 버튼을 눌러도 장치에서 tableView를 새로 고칠 수있는 방법이 없습니다.
내 해결책 :
-(void) viewWillAppear: (BOOL) animated { [self.tableView reloadData];}
포지셔닝에 viewDidLoad를 사용하는 것은 약간 위험하므로 경계가 설정되지 않았으므로 피해야합니다. 예기치 않은 결과가 발생할 수 있습니다 (다양한 문제가 발생했습니다 ...)
이 게시물 은 다른 방법과 각 방법에서 발생하는 일을 잘 설명합니다.
현재 일회성 초기화 및 위치 지정을 위해 다른 권장 사항이있는 사람이 있으면 viewDidAppear를 플래그와 함께 사용하려고 생각합니다.
뷰를 열 때 마다 데이터를로드해야 합니까? 아니면 한 번만 ?
- 빨간색 : 매번 변경할 필요가 없습니다. 일단로드되면 원래 상태 그대로 유지됩니다.
- 자주색 : 시간이 지남에 따라 또는 매번로드 한 후에 변경해야합니다. 동일한 추천 사용자 3 명을보고 싶지 않다면 화면으로 돌아올 때마다 다시로드해야합니다. 그들의 사진이 업데이트 될 수 있습니다 ... 5 년 전의 사진을보고 싶지 않습니다 ...
viewDidLoad:
어떤 처리를 수행하든 한 번 수행해야합니다.
viewWilLAppear:
페이지가로드 될 때마다 변경해야하는 처리
레이블, 아이콘, 버튼 제목 또는 대부분의 dataInputedByDeveloper는 일반적으로 변경되지 않습니다. 이름, 사진, 링크, 버튼 상태, 목록 (tableView 또는 collectionView의 입력 배열) 또는 대부분의 dataInputedByUser는 일반적으로 변경됩니다.
'Programing' 카테고리의 다른 글
왜 자식이 "파일을 병합 해제했기 때문에 풀을 사용할 수 없습니다"라고 표시합니까? (0) | 2020.06.04 |
---|---|
원격 레지스트리에 Docker 이미지의 모든 태그를 나열하는 방법은 무엇입니까? (0) | 2020.06.04 |
기본 ES6 약속에서 Bluebird Promise.finally에 해당하는 것은 무엇입니까? (0) | 2020.06.04 |
IIS를 디버깅 할 때 Visual Studio Attach 보안 경고 해제 (0) | 2020.06.04 |
항상 git 자격 증명을 요구하는 Visual Studio Code (0) | 2020.06.04 |