假设我有一个名为 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+Dictionary
、UIView+Border
、UIView+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/