objective-c - 有没有办法将 Objective-C 类别仅应用于当前类别(或同等效果)?

标签 objective-c objective-c-category

假设我有一个名为 MyCustomView 的 UIView 自定义子类。还假设我在 UIView 上有一个名为 UIView+Dictionary 的类别,它将名为 dictionary 的 NSDictionary 属性添加到每个 UIView。

如果我将 UIView+Dictionary.h 导入到 MyCustomView.m 中,那么 MyCustomView.m 中引用的每个 View 都会添加此内容dictionary 属性,在许多情况下这正是所需的行为。

但是,如果我希望 UIView+Dictionary 仅应用于 MyCustomView 本身,而不是应用于 MyCustomView.m 中引用的每个 UIView,是否有有办法做到这一点(或达到类似的效果)吗?

我想避免使 MyCustomView 成为另一个自定义子类的子类(例如 MyViewWithDictionary),因为我希望能够导入多个类别对于类似于多重继承的东西(例如,UIView+DictionaryUIView+BorderUIView+CustomAnimations)。

在我自己的实际场景中,我编写了一个类别来在 View Controller 中自动实现自定义 UINavigationBar,但我希望该类别仅适用于我将类别导入到的 View Controller ,而不适用于任何该文件中可能引用的其他 View Controller 。

任何和所有的见解都值得赞赏!我提前道歉,因为我相当确定有更正确的术语来描述上述效果。

最佳答案

However, if I wanted UIView+Dictionary applied only to MyCustomView itself [...] is there a way to do so [...]?

仅将类别更改为 MyCustomView 而不是 UIView。

header 与类别的方法是否在任何给定实例上存在无关。如果该类别被编译到您的程序中,则无论实例是在哪里创建的,方法都在那里。这就是前缀对于添加到框架类的方法如此重要的原因:类别具有全局作用,名称冲突是未定义的行为。

就编译器而言, header 仅影响方法的可见性。不管怎样,您都可以使用常见的技巧在运行时调用它们。

当运行时在启动时初始化时,类别会对类本身生效。如果您希望类别的方法仅在某个类上可用,则必须在该类上定义该类别。

关于objective-c - 有没有办法将 Objective-C 类别仅应用于当前类别(或同等效果)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39520180/

相关文章:

objective-c-category - 如何继承 NSTextAttachment?

iphone - 更改静态库的源需要清理并在 xcode 4 中构建

ios - methodSignatureForSelector 内存泄漏

ios - 由于未捕获的异常 'NSUnknownKeyException' 而终止应用程序此类不符合 key .img 的键值编码

objective-c - 协议(protocol)和警告类别 "class does not implement protocol"

ios - 如何以编程方式更改完整的 ios 应用程序字体

ios - Xcode 中的头文件(包括自身)没有警告

iphone - 在 iOS 中绘制矩形

ios - 如何使用 "appname://openApp?"在 iOS 中打开 App?