防止自定义类被类别更改

时间:2016-03-10 14:50:33

标签: ios objective-c objective-c-category

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

//MyLibCustomLabel.h
@interface MyLibCustomLabel : UILabel

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

此自定义lib集成在CategoryUILabel的项目中,该类有一种修改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不能以不希望的方式进行更改,因此在集成它的项目中无需修改。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

没有什么可以用来“保护”一个类被定义的可能类别。

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

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