+(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) 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] 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之后。
@end