OS 보기 제어 대상의 생명주기-init,viewDidLoad,viewWillAppear,viewDidAppear,viewWillDisappear,view
it,viewDidLoad,viewWillAppear,viewDidAppear,viewWillDisappear,viewDidDisappear의 차이 및 용도
init - 초기화 프로그램
viewDidLoad - 뷰 로드
viewWillAppear - UIViewController 객체의 보기가 창에 추가될 때 호출됩니다.
viewDidApper - UIViewController 객체의 보기가 창에 추가되었을 때 호출됩니다.
viewWill Disappear - UIViewController 대상의 보기가 사라지거나 덮어쓰거나 숨겨질 때 호출;
viewDidDisappear - UIViewController 대상의 보기가 사라지거나 덮어쓰거나 숨겨졌을 때 호출;
viewVillUnload - 메모리가 너무 낮을 때 사용하지 않아도 되는 뷰를 띄워야 할 때 띄울 때 호출합니다.
viewDidUnload - 메모리가 너무 낮으면 필요하지 않은 뷰를 표시할 때 호출합니다.
보기 제어 대상은alloc와 init를 통해 만들어지지만 보기 제어 대상은 만들어지는 순간 바로 해당하는 보기를 만들지 않고 필요할 때loadView를 호출해서 만들어서 메모리 사용률을 높일 수 있습니다.예를 들어 어떤 탭에 UIViewController 대상이 많으면, 어떤 UIViewController 대상의 보기에도 해당하는 탭이 선택되었을 때만 만들어집니다.
예를 들어 다음과 같은 코드가 있습니다.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
UITabBarItem *tbi = [self tabBarItem];
[tbi setTitle:@"CurrentTime"];
[[self view ] setBackgroundColor:[UIColor yellowColor]];
}
return self;
}
UIViewController의 init 방법에서 접근한 실례 변수view를 init에서 배경을 노란색으로 설정합니다.색, 실행 프로그램, 우리는 배경이 확실히 노란색으로 변한 것을 발견할 수 있다.색, 그러나 우리가 보기를 사용할 필요가 없을 때, 이 보기는 이미 불러왔습니다. UIViewController의 초기 방법에서 실례 변수view에 접근하면 불러오는 지연 메커니즘이 효력을 상실할 수 있습니다. 이 문제는 심각하지 않지만, 너무 낮은 경고가 저장되어 있음을 고려하면 문제가 커집니다.
프로그램을 실행하고 시뮬레이터의 하드웨어 -> 아날로그 메모리에 대한 경고가 너무 낮습니다. 원래 설정된 노란색을 발견할 수 있습니다.색 배경이 보이지 않습니다. 메모리가 너무 낮으면 보기 제어 대상이 메모리가 너무 낮다는 경고를 보낼 때didReceive Memory Warning 메시지를 받습니다. 이 방법은 기본적으로 실행됩니다. 보기 제어 대상의 보기가 보이는지 확인하고 보이지 않으면 방출합니다. 다음에 이 보기를 불러올 때 init 방법을 실행하지 않고 viewDidLoad 방법만 실행합니다.그래서 [[selfview] setBackgroundColor:[UIColoryellowColor]를viewDidLoad에 넣으십시오. 만약 보기가 메모리가 너무 낮아서 풀리면 다음에 이 보기에 사용해야 할 때, 프로그램은 이 보기를 실행하는viewDidLoad 방법을 기본적으로 선택합니다. 그러면 배경색이 다시 나타납니다.
init,viewDidLoad,viewWillAppear,viewDidAppear,viewWillDisappear,viewDidDisappear의 실행 순서:
프로그램 로그를 보면 다음과 같습니다.
2012-10-1915:51:44.811inHyron[483:b903] init
2012-10-1915:51:54.081inHyron[483:b903] viewDidLoad
2012-10-1915:51:54.082inHyron[483:b903] viewVillAppear
2012-10-1915:51:54.084 inHyron[483:b903] viewDidAppear
분명히 init를 실행한 다음viewDidLoad를 실행한 다음viewWillAppear를 실행하고 마지막으로viewDidAppear를 실행하면 보기가 사라지거나 덮어쓰일 때 보기가 생성됩니다.
2012-10-1915:54:14.557inHyron[483:b903] viewWillDisappear
2012-10-1915:54:14.558inHyron[483:b903] viewDidDisappear
이렇게 하면 보기가 사라집니다. 메모리 경고를 시뮬레이션할 때:
2012-10-1915:55:14.333inHyron[483:b903] Received simulated memorywarning.
2012-10-1915:55:14.334inHyron[483:b903] viewWillUnload
2012-10-1915:55:14.335 inHyron[483:b903]viewDidUnload
log에서 볼 수 있듯이 보기 제어 대상이 메모리 경고를 받았을 때 프로그램은viewWillUnload를 실행하고 마지막으로viewDidUnload를 실행한다.
이렇게 한 세트의 절차가 완성되었는데 상세하게 썼는지 모르겠다...
그리고 잘 보이지 않는 것은 나의 작은 데모를 떼어낼 수 있다.http://http://download.csdn.net/detail/weasleyqi/4664799, CurrentTimeViewController.m에서 상세한 로그를 다 썼으니 여러분들은 연구를 취할 수 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.