* .m文件中的类别声明会影响整个应用

时间:2014-08-21 17:56:47

标签: objective-c uinavigationcontroller uinavigationbar objective-c-category

我在一个* .m文件中为UINavigationController实现了以下类别:

@interface UINavigationController (ConfirmPop) <UINavigationBarDelegate>

@end

@implementation UINavigationController (ConfirmPop)

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item
{
    ...

    return YES;
}

@end

我试图在弹出当前视图控制器之前检查一些条件,并且它工作正常,但我发现该类别影响了我的应用中的所有UINavigationController。为什么会这样?我认为这只会发生在我在头文件中声明并且如果我在某处导入的情况下 - 事实并非如此。

1 个答案:

答案 0 :(得分:3)

类别适用于全球。没有办法有选择地应用它们。

类别用于向该类的所有实例添加新功能,尤其是当您的代码不负责创建该类的实例时 - 否则子类化可能是更好的选择。

您可以使用所需的行为创建自己的UINavigationController实例,并仅在需要该行为的地方使用它。或者,如果这种情况不可能,您可以在类别中添加类似属性的方法,以打开和关闭所需的行为。