-awakeFromNib 또는 -viewDidLoad를 사용해야합니까?
최근에 UIViewController 하위 클래스의 -awakeFromNib
메서드 에서 만든 하위 뷰 중 일부가 뷰에서 사라지는 내 앱에서 문제가 발생했습니다 . 주위를 둘러 본 후 나는 문제 -awakeFromNib
를 -viewDidLoad
해결하기 위해 입력 한 코드를 이동하는 것을 발견했습니다 . 것으로 보인다 -awakeFromNib
의 UIViewController가 펜촉에서 아카이브되지 않은 경우 한 번만 호출되는, 그리고 -viewDidLoad
보기가 언 아카이브 될 때마다 호출됩니다.
그렇다면 모범 사례는 무엇입니까? UIViewController가 -awakeFromNib
뷰에 뷰를 추가해서는 안되는 것 같습니다 . 그런 종류의 작업은 -viewDidLoad
. 나는 이것을 올바르게 이해하고 있습니까? 아니면 생각보다 더 혼란 스럽습니까?
awakeFromNib
컨트롤러 자체가 펜촉에서 보관 해제 될 때 호출됩니다 . 뷰 가 생성 / 보관 해제 viewDidLoad
될 때 호출됩니다 . 이 구분은 컨트롤러의 뷰가 별도의 nib 파일에 저장 될 때 특히 중요합니다.
또한 중요한 것은 awakeFromNib
메모리 경고에서 복구 한 후에 는 함수가 호출되지 않는다는 것입니다. 그러나 viewDidLoad
함수가 호출됩니다.
네, 맞습니다. awakeFromNib
그런 종류의 작업 에 실제로 의존해서는 안됩니다 .
awakeFromNib
.NET에서 deserialization 후에 호출되는 이벤트와 유사합니다. .NET의 이벤트 viewDidLoad
와 유사합니다 Load
.
.NET의 개념에 익숙하다면 이것으로 충분할 것입니다.
나는 예를 들어 대답하려고 노력할 것이다.
정의하면 customCell
클래스와 customCell.xib
파일을 한 후 사용하여 셀을로드
- (NSArray *)loadNibNamed:(NSString *)name owner:(id)owner options:(NSDictionary *)options
, 로 awakeFromNib은 XIB의 개체가 아카이브되지 때 호출됩니다.
를 정의하면을 사용하여 생성 customViewController
될 때 . viewDidLoad 는 뷰 계층 구조에로드 될 때 호출됩니다.customViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
일부 관련 혼란스러운 방법 :
(무효) loadView; 여기에서 서브 클래스가 펜촉을 사용하지 않는 경우 커스텀 뷰 계층을 만들어야합니다. 펜촉 이름을 지정하지 않으면 loadView는 이름이 뷰 컨트롤러의 클래스와 같은 펜촉을로드하려고 시도합니다. 그러한 펜촉이 없으면 -view가 호출되기 전에 -setView :를 호출하거나 -loadView 메서드를 재정 의하여 뷰를 프로그래밍 방식으로 설정해야합니다. -loadView를 직접 호출해서는 안됩니다.
(void) viewDidLoad : 뷰가로드 된 후 호출됩니다. 코드에서 생성 된 viewController의 경우 -loadView 이후입니다. 펜촉에서 보관되지 않은 뷰 컨트롤러의 경우 이는 뷰가 설정된 후입니다.
ViewController의 경우 IBOutlets는 viewDidLoad ()에서 사용할 수 있습니다.
여기서 stackView 는 ViewController의 IBOutlet을 나타내고 stackView 는 awakeFromNib에서 nil이지만 viewDidLoad ()가 호출 될 때 인스턴스화되었습니다.
참조 URL : https://stackoverflow.com/questions/377202/which-should-i-use-awakefromnib-or-viewdidload
'programing' 카테고리의 다른 글
Typescript가 이름 창 또는 문서를 찾을 수 없습니다. (0) | 2021.01.13 |
---|---|
Nginx 프록시 Amazon S3 리소스 (0) | 2021.01.13 |
Java에 포인터가 있습니까? (0) | 2021.01.13 |
csproj의 오류-중복 항목 (0) | 2021.01.13 |
C ++의 확장 메서드 (0) | 2021.01.13 |