2

假设我有 A 类和 B 类。B 类是 A 类的子类。A 类包含一些属性,然后 B 类通过添加一些特定于该子类的附加属性来扩展 A 类超类。我已经创建了一个 A 类对象,现在希望在运行时将该对象转换为 B 类类型对象,这样我就可以将数据添加到 B 类提供的附加属性中。在 Objective-C 中有什么方法可以做到这一点? 谢谢!

4

3 回答 3

3

你为什么不为 Class B 编写一个构造函数,它将 Class A 作为参数,并带有 Class B 所需的附加属性。

为什么不首先创建一个 B 类?你想要这样做听起来有点奇怪。也许你可以给我们一些关于 A 类和 B 类的更具体的细节,以及你正在用它们做什么。

于 2010-02-13T08:09:40.677 回答
1

您无法就地转换它,因为 B 类的实例大于 A 类的实例(假设附加属性存储在 ivars 中)。Objective-C 没有重新定位对象的能力。

如果您乐于制作对象的副本(即,您确定没有对它的引用或可以更新它们),您可以使用Objective-C 运行时函数执行以下操作:

newB = object_copy(a, class_getInstanceSize(B));
object_setClass(newB, B);
object_dispose(a);
于 2010-02-13T08:28:35.923 回答
0

最简单的方法是将 A 类上的 alloc 替换为实际返回 B 类。

@implementation ClassA (MyCategory)

+ (id)alloc
{
    if (self != [ClassB class])
        return [ClassB alloc];
    return [super alloc];
}

@end

当然,这样做通常是一个非常糟糕的主意。

于 2010-02-13T08:56:56.197 回答