假设我们有一个自定义库,其类继承自UILabel
:
//MyLibCustomLabel.h
@interface MyLibCustomLabel : UILabel
MyLibCustomLabel
链接到.xib
文件中的UILabel,文本填入.xib。
此自定义lib集成在Category
类UILabel
的项目中,该类有一种修改UIlabel
文本的方法
//UILabel+UILabelAdditions.h
@interface UILabel (UILabelAdditions)
//UILabel+UILabelAdditions.m
@implementation UILabel (UILabelAdditions)
- (void)awakeFromNib {
[super awakeFromNib];
[self prependText];
}
-(void)prependText {
NSString *newText = [NSString stringWithFormat:@"blabla + %@", self.text];
self.text = newText;
}
最后,MyLibCustomLabel
中有一个不需要的修改。
在Class中使用自定义类和类别的情况下,有没有办法保护MyLibCustomLabel
免受UILabel上的任何类别的影响?
因此MyLibCustomLabel
不能以不希望的方式进行更改,因此在集成它的项目中无需修改。
感谢您的帮助!
答案 0 :(得分:1)
没有什么可以用来“保护”一个类被定义的可能类别。
但请注意,您显示的示例UILabel
类别无效。类别绝不能尝试覆盖现有方法,也不能尝试调用super
方法。这种行为没有定义,也不能保证按预期工作。
换句话说,类别的awakeFromNib
方法是一个坏主意,不应该这样做。只应在基类中尝试这样的事情,而不是类别。