Objective-C の新機能。init メカニズムをよりよく理解するためにコード スニペットを作成し、いくつかの質問に行き着きました。
@implementation MyClass
-(id) init
{
if (self) {
i = 5;
NSLog(@"self before init - %@ %p i=%d",[self className], &self, i);
} else {
NSLog(@"self is null???");
}
id someClass = [super init];
NSLog(@"the result of super-init - %@ %p",[someClass className], &someClass);
self = [super init];
if (self) {
NSLog(@"self after init - %@ %p %d",[self className], &self, i);
} else {
NSLog(@"self is null???");
}
return self;
}
i
プライベート インスタンス変数ですint
。
結果は次のとおりです。
2012-12-14 18:01:26.403 Init[1621:303] self before init - MyClass 0x7fff5fbff848 i=5
2012-12-14 18:01:26.405 Init[1621:303] the result of super-init - MyClass 0x7fff5fbff838
2012-12-14 18:01:26.405 Init[1621:303] self after init - MyClass 0x7fff5fbff848 5
本当に驚いたのは、someClass のクラス名がMyClass
.
NSObject
サブクラスのインスタンスを返すことをどのように知っていますか (型が一致するだけでなく、まったく同じオブジェクトです)。
init
何度も呼び出して、呼び出す前にインスタンス変数を初期化するのは良い形ではないことは承知していますinit
が、実験しているだけです。
ありがとう。