2012-05-18 65 views
0

以我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使用符合協議的隱藏類別?

回答

1

協議沒有意義運行。只有在編譯過程中才會使用它們來顯示類型錯誤,當您嘗試執行您現在正在執行的操作時。你爲什麼不想TheTabBarController是如果它實現了協議的UINavigationControllerDelegate

在Objective-C,你可以調用任何對象的任何方法,它可以通過實施forwardInvocation:(NSInvocation *)anInvocation或相關方法中的一種處理。您也可以在使用objc_install_instance_method和相關功能運行時添加新方法的對象或類。