防止自定义 class 被类别更改

Prevent custom class from being altered by a category

假设我们有一个自定义库,其中 class 继承自 UILabel:

//MyLibCustomLabel.h
@interface MyLibCustomLabel : UILabel

MyLibCustomLabel链接到.xib文件中的一个UILabel,文本填入.xib.

此自定义库集成在 UILabel class 上具有 Category 的项目中,该项目具有修改 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 和类别都用于 Class 的情况下,有没有办法保护 MyLibCustomLabel 不受 UILabel 上任何类别的影响?

这样 MyLibCustomLabel 就不会以不希望的方式进行更改,并且在集成它的项目中无需进行任何修改。

感谢您的帮助!

无法对 "protect" 正在定义的可能类别中的 class 执行任何操作。

但请注意,您显示的示例 UILabel 类别无效。类别绝不能尝试覆盖现有方法,也不得尝试调用 super 方法。这种行为没有定义,也不能保证按预期工作。

换句话说,类别的awakeFromNib方法是个坏主意,不应该这样做。这样的事情应该只在一个基地class中尝试,而不是在一个类别中。