1.对于load方法,只要文件被引用就会被调用。load方法调用顺序是父类的load方法优先调用于子类的load方法,而本类的load方法优先于category调用。
2.文件被引用并不代表initialize就会被调用,只有类或者子类中第一次有函数调用时,都会调用initialize。initialize是线程安全的,我们不能在initialize方法中加锁,这有可能导致死锁。我们也不应该在函数中实现复杂的代码。initialize只会被调用一次。
3.+load和+initialize共同点:
在不考虑开发者主动使用的情况下,系统最多会调用一次
如果父类和子类都被调用,父类的调用一定在子类之前
这两个方法不适合做复杂的操作,应该是足够简单
在使用时都不要过重地依赖于这两个方法,除非真正必要。在使用时一定要注意防止死锁!
都不需要调用[super load]、[super initialize]
+load和+initialize不同点:
load方法没有自动释放池,如果做数据处理,需要释放内存,则开发者得自己添加autoreleasepool来管理内存的释放。
和load不同,即使子类不实现initialize方法,也会把父类的实现继承过来调用一遍。注意的是在此之前,父类的方法已经被执行过一次了,同样不需要super调用。
网友评论