クラスの 1 つに「最後に作成されたオブジェクトの静的参照を常に保持する」パターンがあります。その新しいインスタンスを作成すると、静的ポインターがこの新しいインスタンスに設定されているはずです。以下の方法で解決しました。
static AViewController *actualSelf = nil;
+ (AViewController *) getActualSelf {
return actualSelf;
}
- (AViewController *) init {
self = [super init];
self.title = @"Title";
actualSelf = nil; // Why do I need this line the second time init gets called?
actualSelf = self; // this is the only line which sets actualSelf
return self;
}
- (void)dealloc {
actualSelf = nil;
}
…SOME IMPORTANT MUST BE MISSING, BUT I DON'T KNOW WHAT
- AViewController a を作成する > Init が呼び出される > 静的ポインターが a に設定される
- AViewController b を作成します > Init が呼び出されます > 静的ポインターを b に設定する必要があります。しかし、静的ポインタは b に設定されていません! aから nil に設定されます。
ほとんどの場合、オブジェクト a は b が作成される前に割り当て解除されます。
静的変数の割り当てを解除するときは、常に静的変数を nil にリセットする必要がありますか? いいえ、以下の私自身の回答を参照してください。
「actualSelf = nil;」という行がないと、ARC オブジェクト a を介して、actualSelf がオブジェクト b に設定された瞬間に割り当てが解除されます。