我有这样的类层次结构:
ClassA 继承自 NSObjectClassB 继承自 ClassAClassA实现copyWithZone:这样的:执行:
-(id)copyWithZone:(NSZone *)zone
{
ClassA *clone = [[ClassA allocWithZone:zone] init];
// other statements
return clone;
}
Run Code Online (Sandbox Code Playgroud)
ClassB 实现像这样的方法
-(id)copyWithZone:(NSZone *)zone
{
ClassB *clone = [super copyWithZone:zone];
// other statements
return clone;
}
Run Code Online (Sandbox Code Playgroud)
ClassC 有这样的属性:
@property(nonatomic, copy) ClassA *classA;
Run Code Online (Sandbox Code Playgroud)
所以,当我做这样的事情时:
ClassB *classBPtr = [[ClassB alloc] init];
ClassC *classCPtr = [[ClassC alloc] init];
[classCPtr setClassA:classBPtr];
// other code
Run Code Online (Sandbox Code Playgroud)
某种程度上,该classA属性ClassC永远不会意识到classA指针实际上指向的是一个实例ClassB.因此,如果我调用一个方法classA,它只会调用基类的实现(在其中ClassA)而不是在派生类实现中ClassB
我可能搞砸了什么想法?
dea*_*rne 26
尝试改变
ClassA *clone = [[ClassA allocWithZone:zone] init];
Run Code Online (Sandbox Code Playgroud)
至
ClassA *clone = [[[self class] allocWithZone:zone] init];
Run Code Online (Sandbox Code Playgroud)