TheTabBarController では、UINavigationControllerDelegate プロトコルに準拠せずに、クラスを moreNavigationController.delegate に割り当てることができました。
// without conforming to protocol, <UINavigationControllerDelegate>
@interface TheTabBarController : UITabBarController
self.moreNavigationController.delegate = self;
次の警告が発生するだけですが、コンパイルは成功します。
互換性のない型 'TheTabBarController *const __strong' から 'id' に割り当てています
プロトコルのメソッドは実行時にエラーなしで呼び出されます。一部のView Controllerのナビゲーションバーを非表示にするために使用します。
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
だから、知りたいのですが、これは合法で安全ですか、それとも; 後でクラッシュするか、メモリリークしますか?これは意味的にどのように許可されますか? インターフェイスで定義されておらず、プロトコルが準拠していないにもかかわらず、ランタイムはどのようにメソッドを解決できますか? または、UITabBarController は、プロトコルに準拠する非表示のカテゴリを使用していますか?