次のコードがあります:
// create new delegate
MyCustomApplicationDelegate *redelegate = [[MyCustomApplicationDelegate alloc] init];
redelegate.delegate = [(NSObject<UIApplicationDelegate42> *)[UIApplication sharedApplication].delegate retain];
// replace delegate
[UIApplication sharedApplication].delegate = redelegate;
...
[UIApplication sharedApplication].delegate = redelegate.delegate;
[redelegate.delegate release];
最後の行の後、システムは基本 UIApplicationDelegate クラスの dealloc メソッドを呼び出しました。なぜ?デリゲート プロパティについて、UIApplication に関する Apple のドキュメントを読みました。
@property(nonatomic, assign) id デリゲート
ディスカッション デリゲートは、UIApplicationDelegate 正式なプロトコルを採用する必要があります。UIApplication はデリゲートを割り当て、保持しません。
UIApplication がデリゲートを割り当て、保持しないことを明確に示しています。では、なぜ私のベースデリゲートを破壊するのでしょうか?