Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重写Objective-C中的类别定义方法是否安全?_Objective C_Objective C Category - Fatal编程技术网

重写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文件中定义。(如何通过编译器检查取决于您自己。)