美文网首页
几个系统方法调用的场景

几个系统方法调用的场景

作者: 成功没有捷径_LBQ | 来源:发表于2016-07-18 17:20 被阅读0次

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:

相关文章

网友评论

      本文标题:几个系统方法调用的场景

      本文链接:https://www.haomeiwen.com/subject/baapjttx.html