生命周期
Controller視圖控制器在iOS程序中非常的常見(jiàn), 每個(gè)controller在創(chuàng)建視圖的時(shí)候,會(huì)調(diào)用loadView方法, 該方法的作用是給controll加載一個(gè)視圖,并且該視圖是透明的
viewController一般可以分為兩類:
展示類controller: 用于顯示UI界面,可以用來(lái)繼承.常用的只有UIViewController和UITableViewController可以被繼承
容器類controller: UINavigationController 和UITabBarController.兩者都具有Controllers的屬性. UINavigationController 是一種棧式的結(jié)構(gòu),push和pop. 一般控制器之間具有依賴關(guān)系. UITabBarController中的控制器是數(shù)組的排列方式.
// 初始化控制器
- (instancetype)init {
self = [super init];
return self;
}
// 在調(diào)用loadview之前,當(dāng)前控制器是沒(méi)有view的
- (void)loadView {
[super loadView];
//加載控制器自帶的view視圖,此方法一般情況下不需要重寫(xiě)
}
- (void)viewDidLoad {
[super viewDidLoad];
// 當(dāng)控制器自帶視圖加載完畢后,調(diào)用此方法
// 此時(shí)view即將限時(shí),此時(shí)的superview一般是nil
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
// 視圖即將顯示
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
// view已經(jīng)顯示
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
// view 即將消失,此時(shí)還沒(méi)有調(diào)用removeFromSuperView
}
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
// 此時(shí)view已經(jīng)從superview中移除了
}
- (void)viewDidUnload {
[super viewDidUnload];
// view從內(nèi)存中消失
}
// 控制器釋放,此方法由系統(tǒng)內(nèi)部實(shí)現(xiàn),在ARC中程序員不能自行釋放
- (void)dealloc {
[super dealloc];
}
1, 如果我們不重寫(xiě)loadView,系統(tǒng)會(huì)默認(rèn)實(shí)現(xiàn)loadView方法給controller自動(dòng)創(chuàng)建一個(gè)透明視圖
2, 如果我們重寫(xiě)了loadView ,就必須給controller設(shè)置視圖,否則會(huì)死循環(huán)(也可在viewDidload中設(shè)置這個(gè)view,只要設(shè)置了,程序就不會(huì)出現(xiàn)死循環(huán)).在viewDidLoad方法中,如果檢測(cè)不到視圖,就會(huì)不斷調(diào)用loadView, 這個(gè)時(shí)候就會(huì)出現(xiàn)死循環(huán)
MVC
MVC 是一個(gè)框架級(jí)的設(shè)計(jì)模式,其核心為controller控制器層
- M model 數(shù)據(jù)層 負(fù)責(zé)數(shù)據(jù)的映射,提供數(shù)據(jù)
- V view 視圖層 負(fù)責(zé)數(shù)據(jù)的展示,UI渲染等
- C controller 控制器層 負(fù)責(zé)處理用戶操作,model層和view層通訊,屏幕旋轉(zhuǎn),內(nèi)存警告等