OC中initialize&& load && init方法
来源:互联网 发布:ubuntu停止当前命令 编辑:程序博客网 时间:2024/05/22 15:51
1.+load
+load方法在类加载到系统的时候调用
+load方法调用的时候尚未有自动释放池,所以如果+load中的内容使用到了自动释放池,则代码需要用@autoreleasepool{}包含。 另外,对应Category中的+load方法并不会覆盖类自身中的+load方法,两个+load方法都会调用,而且Category的+load方法在类自身的+load方法之后调用。
2 +initialize
+initialize方法在一个比较安全的环境中调用,比+load更适合放入初始化代码。+initialize方法在类首次收到消息时调用,若此类一直没有使用,则+initialize就不会调用。 与+load方法类似的时,在向子类发送initialize消息前,总是会先向父类发送initialize消息,如果父类尚未调用+initialize方法则调
Category中的+initialize方法会覆盖类本身的+initialize方法。如果父类中实现了+initialize方法,而子类中没有重写此方法,则子类初始化时就会使用父类的方法
3-init
-init方法用于初始化实例对象,
4. alloc+init <————> new
源码:
+ new{id newObject = (*_alloc)((Class)self, 0);Class metaClass = self->isa;if (class_getVersion(metaClass) > 1) return [newObject init];else return newObject;}+ alloc{return (*_zoneAlloc)((Class)self, 0, malloc_default_zone()); }- init{ return self;}
三个方法的执行顺序:
1.使用实例方法
直接上代码:
@interface Father : NSObject+(void)hello;@end@interface Son : Father+(void)hello;-(void)good;@end@implementation Father+(void)initialize{ NSLog(@"father initialize %s",__FUNCTION__);}+(void)hello{ NSLog(@"father say hello %s",__FUNCTION__);}-(instancetype)init{ if (self==[super init]) { NSLog(@"father initialize %s",__FUNCTION__); } return self;}+(void)load{ NSLog(@"father say load %s",__FUNCTION__);}@end@implementation Son+(void)initialize{ NSLog(@"son initialize %s",__FUNCTION__);}+(void)hello{ NSLog(@"son say hello %s",__FUNCTION__);}+(void)load{ NSLog(@"son say load %s",__FUNCTION__);}-(instancetype)init{ if (self==[super init]) { NSLog(@"son initialize %s",__FUNCTION__); } return self;}-(void)good{ NSLog(@"son say good %s",__FUNCTION__);}@end@interface Son(Category)@end@implementation Son (Category)+(void)load{ NSLog(@"sonCategory say load %s",__FUNCTION__);}-(void)goodbye{ NSLog(@"sonCategory say goodbye %s",__FUNCTION__);}@endint main(int argc, const char * argv[]) { @autoreleasepool { // insert code here...// [Father hello];// [Son hello];// [[[Son alloc]init]good];// [Son hello]; [[[Son alloc]init]goodbye]; } return 0;}
father say load +[Father load]
son say load +[Son load]
sonCategory say load +[Son(Category) load]
father initialize +[Father initialize]
son initialize +[Son initialize]
father initialize -[Father init]
son initialize -[Son init]
sonCategory say goodbye -[Son(Category) goodbye]
- OC中initialize&& load && init方法
- OC中initialize方法和init方法的区别
- OC load 和 initialize 方法
- OC中load方法和initialize方法的异同
- OC中类的load和initialize方法
- OC- +load方法 和 +initialize方法
- oc中initialize与init的区别
- oc中init和initialize的区别
- oc类初始化方法load和initialize
- OC中的load和initialize方法
- 细说OC中的load和initialize方法
- kidd风的IOS日志之OC中initialize方法和init方法的区别
- [基础]OC的initialize和init方法的区别
- iOS - +load与+ initialize -init
- [iOS]细说OC中的load和initialize方法
- 关于IOS OC 中的load 和 initialize 方法
- load和initialize方法
- initialize和Load方法
- SVM
- Eclipse Java注释模板设置详解
- C/C++校招笔试面试经典题目总结八
- 直线,曲线,折线分割平面以及平面分割空间问题
- [Wireshark]Sniffing with Wireshark(or tshark) as a Non-Root User on CentOS
- OC中initialize&& load && init方法
- 日经春秋 20150724
- 求两个升序序列的中位数
- openstack 与 ceph (osd 部署)
- javafx tableview默认选择第一行
- 如何创建、使用以及解析自定义注解
- 【BZOJ】2208 连通数
- JavaScript中的本地对象、内置对象、宿主对象
- 我的Mongo数据库之旅-基础知识