一、ViewController的生命周期
- (void)loadView{
[super loadView];
NSLog(@"%s",__func__);
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
NSLog(@"%s",__func__);
}
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
NSLog(@"%s",__func__);
}
- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
NSLog(@"%s",__func__);
}
- (void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
NSLog(@"%s",__func__);
}
- (void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
NSLog(@"%s",__func__);
}
2021-06-15 20:46:32.215679+0800 TestVC[7923:804814] -[ViewController loadView]
2021-06-15 20:46:32.215922+0800 TestVC[7923:804814] -[ViewController viewDidLoad]
2021-06-15 20:46:32.216450+0800 TestVC[7923:804814] -[ViewController viewWillAppear:]
2021-06-15 20:46:32.271312+0800 TestVC[7923:804814] -[ViewController viewDidAppear:]
2021-06-15 20:47:06.964063+0800 TestVC[7923:804814] -[ViewController viewWillDisappear:]
2021-06-15 20:47:07.493666+0800 TestVC[7923:804814] -[ViewController viewDidDisappear:]
那么一开始就是init-->loadView-->viewDidLoad-->viewWillAppear-->viewDidAppear-->viewWillDisappear-->viewDidDisappear
二、OC的关键字
分类 | 属性关键字 |
原子性 | atomic nonatomic |
读写性 | wr ro setter getter |
内存管理 | assign weak unsafe_unretain retian strong copy |
原子性
属性关键字 | 用法 |
atomic | 编译器会自动生成互斥锁,对setter getter方法进行加锁,可以保证属性赋值和取值是线程安全的,但不包括操作和访问 |
nonatomic | 一般属性用nonatomic修饰 |
读写性
属性关键字 | 用法 |
rw | 可读可写 setter & getter |
ro | 只读 getter |
setter | 指定生成setter方法名 |
getter | 指定生成getter方法名 |
内存管理
属性关键字 | 用法 |
assign | 1.修饰对象 基本数据类型和对象类型 2.setter方法的实现是直接复制,一般用于基本数据类型 3.修饰基本数据类型:BOOL等 4.修饰对象类型时,不增加其引用计数 5.会产生悬垂指针(悬垂指针:assign 修饰的对象在被释放之后,指针仍然指向原对象地址,该指针变为悬垂指针。这时候如果继续通过该指针访问原对象的话,就可能导致程序崩溃)。 |
weak | 1.只能修饰对象类型 2.ARC下使用 3.修饰弱引用,不增加对象引用计数,可以避免循环引用 4.weak修饰的对象在释放之后,会讲指针置为nil,不会产生悬垂指针 |
unsafe_unretained | 1.可以修饰基本数据类型和对象类型 2.MRC下使用 3.unsafe_unretained会产生悬垂指针 |
retain | 1.MRC下使用 2.修饰强引用,将指针原来指向的旧对象释放掉,同时将新对象的引用计数加1 |
strong | 1.ARC下使用 2.和Retain一样 3.修饰block时,strong相当于copy,而retain相当于assign |
copy | setter方法的实现时release旧值,copy新值,用于NSString block |
三、计算机网络七层级
OSI七层网络模型 | |
应用层 | 与其他计算机进行通讯的应用 telnet http FTP |
表示层 | 定义数据格式和加密 ASCII等 |
会话层 | 定义如何开始控制和结束一个会话:RPC SQl |
传输层 | 选择恢复协议,复用数据流的输入,对数据包进行排序,TCP UDP SPX |
网络层 | 定义了包的传输,标识结点的逻辑地址,将一个包分解成更小的包:IP IPX |
数据链路层 | 定义了单个链路上如何传输数据 ATM FDDI等 |
物理层 | 定义了有关介质、链接头,帧、帧的使用,电流,编码以及光调制等规范 |
四、两个子视图找到同一个VC
五、判断block的类型
有Global。Stack。Malloc
没有访问auto变量就是Global,在ARC环境下编译器会自动将栈上的blockcopy到堆上
六、MVVM
MVVM(Model–view–viewmodel)是一种软件架构模式。 MVVM有助于将图形用户界面的开发与业务逻辑或后端逻辑(数据模型)的开发分离开来,这是通过置标语言或GUI代码实现的。 MVVM的视图模型是一个值转换器, 这意味着视图模型负责从模型中暴露(转换)数据对象,以便轻松管理和呈现对象。
七、分类的优缺点
可以为现有的类添加新方法的方式,利用OCRuntime分配机制。
把类的实现分开在不同的文件里面,方便代码管理,创建私有方法的向前引用。向对象添加非正式协议。同时也具有局限性:
只能给某个已有的类拓展方法;不能扩充成员变量,用关联对象添加属性;当分类中方法名和类中的方法名一样分类中的方法名会覆盖原类的方法名;多个方类中存在同名方法,运行时调用最后参与编译的方法会被调用。
八、性能优化着手点
CPU层面 GPU层面 耗电优化 网络优化 定位优化 硬件检测优化 app启动优化 冷启动和 热启动 安装包瘦身
https://www.jianshu.com/p/c51106cbea05