我有下一个代码:
// 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 分配并且不保留委托。那么,为什么它会破坏我的基础委托?