1.自定義控制器存在的問題:
1>.重復(fù)創(chuàng)建過多的控制器
2>.出現(xiàn)了不好的現(xiàn)象:控制器已經(jīng)死了旺订,但是控制器的view還在
3>.3個控制器的view同時出現(xiàn)了(層疊了)
一個View 從父控件中移除馍盟,就會銷毀,不是這樣的答姥,得取決去它有沒有強指針指著。
2.控制器父子關(guān)系的建立原則
?a. 如果2個控制器的view是父子關(guān)系(不管是直接還是間接的父子關(guān)系),那么這2個控制器也應(yīng)該為父子關(guān)系
[a.view addSubview:b.view];
[a addChildViewController:b];
或者
[a.view addSubview:otherView];
[otherView addSubbiew.b.view];
[a addChildViewController:b];
b. 獲得所有的子控制器
?@property(nonatomic,readonly) NSArray *childViewControllers;
c. 添加一個子控制器
//XMGOneViewController成為了self的子控制器
?//self成為了XMGOneViewController的父控制器
?[self ?addChildViewController:[[XMGOneViewController alloc] init]];?
// 通過addChildViewController添加的控制器都會存在于childViewControllers數(shù)組中
d. 獲得父控制器
?@property(nonatomic,readonly) UIViewController *parentViewController;
e. 將一個控制器從它的父控制器中移除
//控制器a從它的父控制器中移除
?[a removeFromParentViewController];
3.補充
實現(xiàn)拷貝的方法
copy:淺拷貝(指針的拷貝)捺宗,不會產(chǎn)生新對象
只會產(chǎn)生不可變的副本對象(比如NSString)
mutableCopy:深拷貝(內(nèi)容的拷貝),會產(chǎn)生新對象
只會產(chǎn)生可變的副本對象(比如NSMutableString)
4. static的作用:
--- ?修飾局部變量 ?:讓局部變量只初始化一次 局部變量在程序中只有一份內(nèi)存 ?并不會改變局部變量的作用域川蒙,僅僅是改變了局部變量的生命周期(只到程序結(jié)束蚜厉,這個局部變量才會銷毀)
--- 修飾全局變量 ?:?全局變量的作用域僅限于當(dāng)前文件
在子程序中定義的變量稱為局部變量,在程序的一開始定義的變量稱為全局變量派歌。
全局變量作用域是整個程序弯囊,局部變量作用域是定義該變量的子程序。
int ? ?const ? *p
const修飾的是 *p
表示*p不能被更改
即地址里面的內(nèi)容不能更改
但p本身并不是常量胶果,可以更改
也就是一個指向常量的指針
char *const p;與 const char * p;的區(qū)別
前者定義P為常量匾嘱,即只能單向賦值一次,P++展開為p=p+1,重復(fù)賦值給常量早抠,出錯霎烙,后者P為地址變量,地址變量是指向該變量的存儲地址值如:4B3F6A,不能賦給一個字符值(字符相當(dāng)于ascii表中對應(yīng)的整數(shù))如強制賦值悬垃,會把原地址變量P變?yōu)橐粋€兩位數(shù)的整數(shù)游昼,造成地址指針溢出。而p++,則表示把該地址變量向下一個存儲單元移動一位尝蠕,如4B3F6A到4B3F6B.所以合法烘豌。
一個是把指針定為const 。就是不能修改指針看彼。也就是char * const p
一個是把指針指向的內(nèi)容定為const 廊佩。就是不能修改指針指向的內(nèi)容 也就是const char *p
簡單來記就是你看const距離char近還是*近。距離char近就是將char類型的內(nèi)容定為cosnt
距離*近就是把指針定為const
5.轉(zhuǎn)場動畫
6.級聯(lián)菜單
1.一個控制器兩個 tableView的數(shù)據(jù)源靖榕;
2.兩個控制器分別控制數(shù)據(jù)源标锄;
導(dǎo)航欄細節(jié):