initialize 的用处
2015-11-20 15:22
302 查看
+(void) initialize 的用处
例如 你有一个类 这个类中的多有方法都是类方法即:
#import <Foundation/Foundation.h>
@interface Car : NSObject
+ (void)run;
+(void)jump;
@end
#import "Car.h"
@implementation Car
static NSMutableArray * g_mArr = nil;
+(void)initialize{
g_mArr = [NSMutableArray array];
}
+ (void)run{
[g_mArr addObject:@"run”];
NSLog(@"%@",g_mArr);
}
+(void)jump{
[g_mArr addObject:@"jump"];
}
@end
打印结果如下
2015-11-20 15:12:07.149 dfasdf[1390:192525] (
run,
jump
)
在这里我们没有调用这个initialize方法,但是为什么initialize自己就调用了呢?因为initialize 是在 init 调用之前调用的 只要你用到了这个类他就会自动调用这个方法 而且只是调用以次
百度到的结果如下:
调用
NSLog(@"Hello, World!");
Duck* duck1 = [[Duck alloc] init];
Duck* duck2 = [[Duck alloc] init];
Duck* duck3 = [[Duck alloc] init];
Chicken* chicken = [[Chicken alloc] init];
#import "Duck.h";
@implementation Duck
+(void) initialize {
NSLog(@"Duck initialize class:%@",[self class]);
}
+(void) load {
NSLog(@"load");
}
-(void) init {
NSLog(@"Duck init");
}
#import <cocoa/Cocoa.h>
#import "Duck.h"
@interface Chicken : Duck {
}
/**
* 2008-03-23 20:21:08.816 initialize_example[30513:10b] Hello, World!
2008-03-23 20:21:08.818 initialize_example[30513:10b] load
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
*/
运行时间的行为之一就是initialize。虽然看起来有点像大家常见的init,但是他们并不相同。
在程序运行过程中,它会在你程序中每个类调用一次initialize。这个调用的时间发生在你的类接收到消息之前,但是在它的超类接收到initialize之后。
但是 load 只会调用一次
@end
例如 你有一个类 这个类中的多有方法都是类方法即:
#import <Foundation/Foundation.h>
@interface Car : NSObject
+ (void)run;
+(void)jump;
@end
#import "Car.h"
@implementation Car
static NSMutableArray * g_mArr = nil;
+(void)initialize{
g_mArr = [NSMutableArray array];
}
+ (void)run{
[g_mArr addObject:@"run”];
NSLog(@"%@",g_mArr);
}
+(void)jump{
[g_mArr addObject:@"jump"];
}
@end
打印结果如下
2015-11-20 15:12:07.149 dfasdf[1390:192525] (
run,
jump
)
在这里我们没有调用这个initialize方法,但是为什么initialize自己就调用了呢?因为initialize 是在 init 调用之前调用的 只要你用到了这个类他就会自动调用这个方法 而且只是调用以次
百度到的结果如下:
调用
NSLog(@"Hello, World!");
Duck* duck1 = [[Duck alloc] init];
Duck* duck2 = [[Duck alloc] init];
Duck* duck3 = [[Duck alloc] init];
Chicken* chicken = [[Chicken alloc] init];
#import "Duck.h";
@implementation Duck
+(void) initialize {
NSLog(@"Duck initialize class:%@",[self class]);
}
+(void) load {
NSLog(@"load");
}
-(void) init {
NSLog(@"Duck init");
}
#import <cocoa/Cocoa.h>
#import "Duck.h"
@interface Chicken : Duck {
}
/**
* 2008-03-23 20:21:08.816 initialize_example[30513:10b] Hello, World!
2008-03-23 20:21:08.818 initialize_example[30513:10b] load
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
*/
运行时间的行为之一就是initialize。虽然看起来有点像大家常见的init,但是他们并不相同。
在程序运行过程中,它会在你程序中每个类调用一次initialize。这个调用的时间发生在你的类接收到消息之前,但是在它的超类接收到initialize之后。
但是 load 只会调用一次
@end
相关文章推荐
- Android 手动显示和隐藏软键盘 android 隐藏显示输入法键盘
- 解决启动报错:Failed to destroy end point associated with ProtocolHandler["ajp-nio-8009"]
- java中时间类型的问题
- 【转】JMeter中对于Json数据的处理方法
- Java基础03 构造器与方法重载
- 最小生成树——Prim(普利姆)算法
- 用C语言写一个订座系统
- FMDB 缓存
- Robotium 运行时Installation error INSTALL_FAILED_VERSION_DOWNGRADE错误
- 图片处理view - 成图,
- 5+plus教程-1
- sql 的join on 和 where 区别
- Xcode真机测试could not find developer disk image解决方法
- 数据库 时间日期函数
- Hibernate注解映射sequence时出现无序增长问题+hibernate 映射 oracle ID自动增长:
- 【转】Jmeter Http请求界面解释
- zookeeper入门学习
- Android之Handler:实现计时器实例
- 找到一个数的所有字典序即字符串的全排列
- a particle filter (sequential Monte Carlo) and a Kalman filter