gpt4 book ai didi

ios - 继承和扩展框架类的问题

转载 作者:行者123 更新时间:2023-11-29 03:28:41 25 4
gpt4 key购买 nike

我有一个继承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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com