客観的なCオブジェクトのランタイムプロセスを理解しようとしているすべて
Object Refs から、オブジェクトの +Initialize メソッドは、最初に呼び出されたメソッドを取得したときに呼び出されます。以下のようにテストファイルを実行します。なぜこれらのオブジェクトが +load だけを呼び出したのか不思議です。
// InitializeTest.h
@interface InitializeTest : NSObject {
@private
}
- (void) show;
@end
@interface InitializeTest(Category)
+ (void) load;
+ (void) initialize;
@end
@interface InitializeTestSub : InitializeTest {
@private
}
- (void) showSub;
@end
@interface InitializeTestSub(Category)
+ (void) load;
+ (void) initialize;
@end
//InitializeTest.m
#import "InitializeTest.h"
@implementation InitializeTest
+ (void) load {
NSLog(@"%s %@",__func__,self);
}
+ (void) initialize {
NSLog(@"%s %@",__func__,self);
}
- (void) show {
NSLog(@"%s",__func__);
}
@end
@implementation InitializeTest(Category)
+ (void) load {
NSLog(@"Category %s %@",__func__,self);
}
+ (void) initialize {
NSLog(@"Category %s %@",__func__,self);
}
@end
@implementation InitializeTestSub
+ (void) load {
NSLog(@"%s %@",__func__,self);
}
+ (void) initialize {
NSLog(@"%s %@",__func__,self);
}
- (void) showSub {
NSLog(@"%s",__func__);
}
@end
@implementation InitializeTestSub(Category)
+ (void) load {
NSLog(@"Category %s %@",__func__,self);
}
+ (void) initialize {
NSLog(@"Category %s %@",__func__,self);
}
@end
//test Code
InitializeTest* test = [[InitializeTest alloc] init];
InitializeTestSub *testSub = [[InitializeTestSub alloc] init];
[test class];
[testSub class];
[test show];
[testSub show];
[testSub showSub];
//////////////////////////////////////////////////
//Result
+[InitializeTest load] InitializeTest
+[InitializeTestSub load] InitializeTestSub
Category +[InitializeTest(Category) load] InitializeTest
Category +[InitializeTestSub(Category) load] InitializeTestSub
-[InitializeTest show]
-[InitializeTest show]
-[InitializeTestSub showSub]