1.自定义控制器存在的问题:
1>.重复创建过多的控制器
2>.出现了不好的现象:控制器已经死了,但是控制器的view还在
3>.3个控制器的view同时出现了(层叠了)
一个View 从父控件中移除,就会销毁,不是这样的,得取决去它有没有强指针指着。
2.控制器父子关系的建立原则
a. 如果2个控制器的view是父子关系(不管是直接还是间接的父子关系),那么这2个控制器也应该为父子关系
[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数组中
d. 获得父控制器
@property(nonatomic,readonly) UIViewController *parentViewController;
e. 将一个控制器从它的父控制器中移除
//控制器a从它的父控制器中移除
[a removeFromParentViewController];
3.补充
实现拷贝的方法
copy:浅拷贝(指针的拷贝),不会产生新对象
只会产生不可变的副本对象(比如NSString)
mutableCopy:深拷贝(内容的拷贝),会产生新对象
只会产生可变的副本对象(比如NSMutableString)
4. static的作用:
--- 修饰局部变量 :让局部变量只初始化一次 局部变量在程序中只有一份内存 并不会改变局部变量的作用域,仅仅是改变了局部变量的生命周期(只到程序结束,这个局部变量才会销毁)
--- 修饰全局变量 : 全局变量的作用域仅限于当前文件
在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
int const *p
const修饰的是 *p
表示*p不能被更改
即地址里面的内容不能更改
但p本身并不是常量,可以更改
也就是一个指向常量的指针
char *const p;与 const char * p;的区别
前者定义P为常量,即只能单向赋值一次,P++展开为p=p+1,重复赋值给常量,出错,后者P为地址变量,地址变量是指向该变量的存储地址值如:4B3F6A,不能赋给一个字符值(字符相当于ascii表中对应的整数)如强制赋值,会把原地址变量P变为一个两位数的整数,造成地址指针溢出。而p++,则表示把该地址变量向下一个存储单元移动一位,如4B3F6A到4B3F6B.所以合法。
一个是把指针定为const 。就是不能修改指针。也就是char * const p
一个是把指针指向的内容定为const 。就是不能修改指针指向的内容 也就是const char *p
简单来记就是你看const距离char近还是*近。距离char近就是将char类型的内容定为cosnt
距离*近就是把指针定为const
5.转场动画
6.级联菜单
1.一个控制器两个 tableView的数据源;
2.两个控制器分别控制数据源;
导航栏细节:
网友评论