我有一个继承UIView的自定义类C,在其中定义了一些常用方法。
现在我想要一个 UITextView 对象 A 和一个 UIView 对象 B 具有这些方法。对于B,我只需要将他的父亲改为C即可。
但是我应该对A做什么呢?我不能直接将其父更改为 C,否则我将丢失 UITextView 的方法。
而且我不能(也不想)使用类别,因为在 C 中我有一些属性和成员变量。
最佳答案
多重继承不是 Objective-C 的特性。充其量,您可以让 UITextView 子类和 UIView 子类都实现一个通用协议(protocol)。当然,这意味着您将不得不复制代码。
我相信您可以通过类别实现您想要的效果。您可以在运行时利用 objc/runtime.h 添加属性(借自 NSHipster )
#import "UIView+MyView.h"
#import <objc/runtime.h>
static const void *IndieBandNameKey = &IndieBandNameKey;
@implementation UIView (MyView)
@dynamic indieBandName;
- (NSString *)indieBandName {
return objc_getAssociatedObject(self, IndieBandNameKey);
}
- (void)setIndieBandName:(NSString *)indieBandName {
objc_setAssociatedObject(self, IndieBandNameKey, indieBandName, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
@end
因为 UITextView 是 UIView 的子类,所以您放入 UIView 类别的方法将应用于您的 UIView 子类以及 UITextView 子类。此外,您还可以在您的类别方法中访问这些动态创建的属性,从而允许您利用您现在声明的那些“成员变量”。
关于ios - 继承和扩展框架类的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20110967/