gpt4 book ai didi

iphone - copyWithZone 返回父类(super class)的对象

转载 作者:太空狗 更新时间:2023-10-30 03:23:07 25 4
gpt4 key购买 nike

我有一个这样的类层次结构:

  • ClassA继承自 NSObject
  • ClassB继承自 ClassA
  • ClassA工具 copyWithZone:像这样:

实现:

-(id)copyWithZone:(NSZone *)zone
{
ClassA *clone = [[ClassA allocWithZone:zone] init];
// other statements
return clone;
}

ClassB像这样实现相同的方法

-(id)copyWithZone:(NSZone *)zone
{
ClassB *clone = [super copyWithZone:zone];
// other statements
return clone;
}

ClassC有这样的属性:

@property(nonatomic, copy) ClassA *classA;

所以,当我做这样的事情时:

 ClassB *classBPtr = [[ClassB alloc] init];
ClassC *classCPtr = [[ClassC alloc] init];
[classCPtr setClassA:classBPtr];
// other code

不知何故 classA ClassC的属性(property)从来没有意识到 classA指针实际上指向 ClassB 的一个实例.因此,如果我在 classA 上调用方法, 它只会调用基类的实现(ClassA 中的实现)而不是 ClassB 中的派生类实现

有什么我可能搞砸的想法吗?

最佳答案

尝试改变

ClassA *clone = [[ClassA allocWithZone:zone] init];

ClassA *clone = [[[self class] allocWithZone:zone] init];

关于iphone - copyWithZone 返回父类(super class)的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5193444/

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