防止自定义 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中尝试,而不是在一个类别中。
假设我们有一个自定义库,其中 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中尝试,而不是在一个类别中。