在我的 TheTabBarController 中,不符合 UINavigationControllerDelegate 协议,我可以将我的类分配给 moreNavigationController.delegate。
// without conforming to protocol, <UINavigationControllerDelegate>
@interface TheTabBarController : UITabBarController
self.moreNavigationController.delegate = self;
它只是引发以下警告,但编译成功。
从不兼容的类型'TheTabBarController *const __strong'分配给'id'
协议的方法在运行时被调用,没有任何错误。我用它来隐藏一些视图控制器的更多导航栏。
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
所以,我想知道,这是否合法且安全?它会在以后崩溃或泄漏内存吗?这怎么能在语义上被允许呢?运行时如何解决方法,尽管它没有在接口中定义并且协议不符合?或者,UITabBarController 使用了符合协议的隐藏类别?