多控制器

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.两个控制器分别控制数据源;

导航栏细节:

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。