参见代码:
@implementation UIView (ios7)
- (void)layoutSubviews
{
[self layoutSubviews];
// ......
}
显然,这将导致“无限递归”。 超级也没有帮助。 我只是想在一个公共类中添加一些常见功能的代码,并且不要认为Inherit会有所帮助。 所以,他们有什么方法可以做到这一点。或者我的要求就是愚蠢。 谢谢!
++++++++++++++++++++++++++
@interface CPUIView :UIView
- (void)layoutSubviews;
@end
...
@implementation CPUIView
- (void)layoutSubviews
{
[super layoutSubviews];
// add some code
}
@end
@implementation UIView (CP)
+ (Class)class
{
return NSClassFromString(@"CPUIView");
}
我认为这段代码可以帮助我解决问题,我只想重写UIView的layoutSubviews函数。因此,我的项目中的任何UIView类都将执行我想要在此函数中执行的操作。
答案 0 :(得分:0)
类别意味着将方法添加到类中,而不是替换它们。这就是子类的用途。你最好创建一个子类,然后你可以调用它......
[super layoutSubviews];
...如果你需要调用原始的UIView方法。
例如:
@interface ESExampleView : UIView
@end
@implementation ESExampleView
- (void)layoutSubviews{
NSLog(@"layoutSubviews called!"); //Do whatever
[super layoutSubviews];
}
@end
答案 1 :(得分:0)
像@eswick所说,类别用于向对象添加方法。通过声明一个与现有方法同名的方法,您实际上会覆盖旧方法。因此,您无法调用它,因为您已将其替换掉。这就是为什么如果要保留该方法的功能,则需要进行子类化。