重写Objective-C中的类别定义方法是否安全?
我有一个类型为重写Objective-C中的类别定义方法是否安全?,objective-c,objective-c-category,Objective C,Objective C Category,我有一个类型为UIViewControllerSubclass:UIViewController的类结构,其中UIViewControllerSubclass的唯一功能是#导入UIViewController+Category.h。我在类别中添加方法的原因是,我还可以创建UITableViewControllerSubclass:UITableViewController,这将#导入UIViewController+category.h。我们都知道,不要重复你自己 现在假设UIViewContr
UIViewControllerSubclass:UIViewController
的类结构,其中UIViewControllerSubclass的唯一功能是#导入UIViewController+Category.h
。我在类别中添加方法的原因是,我还可以创建UITableViewControllerSubclass:UITableViewController
,这将#导入UIViewController+category.h
。我们都知道,不要重复你自己
现在假设UIViewController+Category.h具有以下结构:
@interface UIViewController(Category)
- (void) method1;
- (void) method2;
@end
创建将覆盖
方法1
的UIViewControllerSubclass子类:UIViewControllerSubclass
有多安全?由于Objective-C的消息传递,我假设这会起作用,但出于某种原因,我的直觉告诉我我做得不对。由于类别应用于UIViewController
,所以所有UIViewController
的实例,包括子类,都可以访问这些方法。没有什么不安全的;这就是应用类别的方式。我认为它只是“感觉”不安全,因为类别方法与类的耦合不如实例方法那么紧密。您需要记住,Objective-C是“鸭子类型”的。如果类支持某个方法,则可以(安全地)调用它,即使该方法未在类的.h文件中定义。(如何通过编译器检查取决于您自己。)