Objective-C的Initialize初始化方法研究
来源:互联网 发布:日德兰海战知乎 编辑:程序博客网 时间:2024/05/16 11:56
initialize不是init
运行时间的行为之一就是initialize。虽然看起来有点像大家常见的init,但是他们并不相同。
举个例子,比如一个叫做Duck的类:
- #import "Duck.h";
- @implementation Duck
- +(void) initialize {
- NSLog(@"Duck initialize");
- }
- -(void) init {
- NSLog(@"Duck init");
- }
- @end
我们在这里记录initialize和init调用的时间。
[Session started at 2008-03-23 20:03:25 -0400.]
2008-03-23 20:03:25.869 initialize_example[30253:10b] Hello, World!
2008-03-23 20:03:25.871 initialize_example[30253:10b] Duck initialize
2008-03-23 20:03:25.872 initialize_example[30253:10b] Duck init
2008-03-23 20:03:25.873 initialize_example[30253:10b] Duck init
2008-03-23 20:03:25.873 initialize_example[30253:10b] Duck init
但是如果Duck有一个子类的话,比如我们建一个Duck的子类叫做Chicken(好怪异……):
- NSLog(@"Hello, World!");
- Duck* duck1 = [[Duck alloc] init];
- Duck* duck2 = [[Duck alloc] init];
- Duck* duck3 = [[Duck alloc] init];
- Chicken* chicken = [[Chicken alloc] init];
- }
[Session started at 2008-03-23 20:13:34 -0400.]
2008-03-23 20:13:34.696 initialize_example[30408:10b] Hello, World!
2008-03-23 20:13:34.698 initialize_example[30408:10b] Duck initialize
2008-03-23 20:13:34.699 initialize_example[30408:10b] Duck init
2008-03-23 20:13:34.700 initialize_example[30408:10b] Duck init
2008-03-23 20:13:34.700 initialize_example[30408:10b] Duck init
2008-03-23 20:13:34.700 initialize_example[30408:10b] Duck initialize
2008-03-23 20:13:34.701 initialize_example[30408:10b] Duck init
看来如果一个子类没有实现initialize方法,那么超类会调用这个方法两次,一次为自己,而一次为子类。
[Session started at 2008-03-23 20:21:08 -0400.]
2008-03-23 20:21:08.816 initialize_example[30513:10b] Hello, World!
2008-03-23 20:21:08.818 initialize_example[30513:10b] Duck initialize class:Duck
2008-03-23 20:21:08.819 initialize_example[30513:10b] Duck init
2008-03-23 20:21:08.820 initialize_example[30513:10b] Duck init
2008-03-23 20:21:08.820 initialize_example[30513:10b] Duck init
2008-03-23 20:21:08.820 initialize_example[30513:10b] Duck initialize class:Chicken
2008-03-23 20:21:08.821 initialize_example[30513:10b] Duck init
- Objective-C的Initialize初始化方法研究
- Objective-C的Initialize初始化方法研究
- Objective-C的Initialize初始化方法研究
- Objective-C的Initialize初始化方法研究
- Objective-C的Initialize初始化方法研究
- Objective-C的Initialize初始化方法研究
- Objective-C的Initialize初始化方法研究
- Objective-C的Initialize初始化方法研究
- Objective-C的Initialize初始化方法
- 使用Objective-C的+(void)initialize初始化static变量
- 使用Objective-C的+(void)initialize初始化static变量
- 使用Objective-C的+(void)initialize初始化static变量
- 使用Objective-C的+(void)initialize初始化static变量
- Objective-C类初始化:load与initialize
- Objective C类方法load和initialize的区别
- Objective C类方法load和initialize的区别
- Objective C类方法load和initialize的区别
- Objective C类方法load和initialize的区别
- oralce 统计信息和直方图
- 设计模式 一
- 血字的研究《一》
- 关闭指定程序 winform c# 源码
- 线程同步
- Objective-C的Initialize初始化方法研究
- 美国留学申请:PS常用词汇英汉对照
- 关于UILabel换行以及 自适应高度
- 最小生成树 prim算法 讲解
- 设计模式 二
- android download manager用法
- NHibernate对某列数据进行查询是报引发类型为“Antlr.Runtime.NoViableAltException”的异常。
- 七夕感怀
- 怎么把编译命令全部显示?