1. loadView
使用场景:
当控制器的view初始化的时候调用 作用:初始化控制器的view(如:使imageView成为控制器的view)
它比viewDidLoad更先一步执行
2. load和initialize的区别:(类方法)
//load 什么时候调用: 当程序已启动的时候就会调用
// 作用: 把当前类加载进内存,放在代码区
//initialize 什么时候调用: 当 当前类/子类 第一次初始化当前类的时候调用
// 作用: 初始化这个类(如自定义一个nav 然后在。m文件里面初始化这个类 设置nav的背景,文字大小等等)
Apple的文档很清楚地说明了initialize和load的区别在于:load是只要类所在文件被引用就会被调用,而initialize是在类或者其子类的第一个方法被调用前调用。所以如果类没有被引用进项目,就不会有load调用;但即使类文件被引用进来,但是没有使用,那么initialize也不会被调用。
它们的相同点在于:方法只会被调用一次。
总结
load和initialize方法都会在实例化对象之前调用,以main函数为分水岭,前者在main函数之前调用,后者在之后调用。这两个方法会被自动调用,不能手动调用它们。
load和initialize方法都不用显示的调用父类的方法而是自动调用,即使子类没有initialize方法也会调用父类的方法,而load方法则不会调用父类。
load方法通常用来进行Method Swizzle,initialize方法一般用于初始化全局变量或静态变量。
load和initialize方法内部使用了锁,因此它们是线程安全的。实现时要尽可能保持简单,避免阻塞线程,不要再使用锁。
使用场景:
将针对于类修改放在intialize中,将针对Category的修改放在load中。
但是假如我们是修改系统的类,一般会通过添加Category来添加功能,但是如果修改initialize会导致原生的intialize不会执行,所以放在load中会比较妥当。
3.reloadData
// 在开发中不建议
// 当数据量特别大的时候,不要随意刷新,防止卡顿
[self.tableView reloadData];
4.layoutSubviews
使用场景:自定义控件的时候用到 设置位置
- (void)layoutSubviews{
[super layoutSubviews];
}
5. -init 和 +initialize的区别:
01.只要new一次,init就会调用一次,new多少次,init就调用多少次,但initialize只会调用一次。
02.如果子类没有实现initialize的重写,在子类收到消息的时候,会调用两次initialize,一次是父类调用的,一次是子类调用的。
执行顺序:initialize -> init -> viewDidLoad
6.
普通类的方法
init
initialize:
控制器类的方法
init
initialize:
initWithCoder:
UI控件类的方法
init
initialize:
initWithCoder:
initWithFrame: