我有这样的阶级等级:
ClassA继承自NSObjectClassB,继承自ClassAClassA实现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从未意识到classA指针实际上指向ClassB的一个实例。因此,如果我在classA上调用一个方法,它只会调用基类的实现(ClassA中的实现),而不会调用ClassB中的派生类实现
你知道我在哪里搞砸了吗?
发布于 2011-03-04 12:11:44
试着改变
ClassA *clone = [[ClassA allocWithZone:zone] init];至
ClassA *clone = [[[self class] allocWithZone:zone] init];发布于 2012-10-23 14:53:06
ClassA
-(id)copyWithZone:(NSZone *)zone
{
ClassA *copyObject = NSCopyObject(self, 0, zone);
//copy ClassA members here
return copyObject;
}
ClassB
-(id)copyWithZone:(NSZone *)zone
{
ClassB *copyObject = [super copyWithZone:zone];
//copy ClassB members here
return copyObject;
}https://stackoverflow.com/questions/5193444
复制相似问题