programing

-awakeFromNib 또는 -viewDidLoad를 사용해야합니까?

nicescript 2021. 1. 13. 23:35
반응형

-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 ()가 호출 될 때 인스턴스화되었습니다.

awakeFromNib ()의 IBOutlets 상태 대 viewDidLoad ()의 IBOutlet 상태

참조 URL : https://stackoverflow.com/questions/377202/which-should-i-use-awakefromnib-or-viewdidload

반응형