我有一个超类'Node'和几个子类,例如'SubNode1','SubNode2'等。
我需要一个所有子类都需要称为'parentNode'的属性。当在'SubNode1'上调用init并且对象通过类型'Node'传递时,它被设置。我使用子类的原因是因为这些对象符合协议,每次都不能使用子类 - 我需要传递'Node'。
我不知道的是如何构建我的对象。应该在哪里释放,属性应该保留在哪里,并且应该保留,因为我经常因为这个而导致exe_bad_access错误。
这就是我目前的结构:
Node.h
@property (nonatomic, retain) Node *parentNode;
Node.m
- (void)dealloc {
[parentNode release];
[super dealloc];
}
SubNode1.h
@interface SubNode1 : Node
{
// No reference to parentNode property
}
SubNode1.m
- (id)initWithParentNode:(SubNode1 *)theParentNode {
self = [super init];
if (self)
{
super.parentNode = theParentNode;
}
return self;
}
- (void)dealloc {
[super dealloc];
}
答案 0 :(得分:2)
你已经以正确的方式设计它了。错误可能是:
super.parentNode = theParentNode;
应该是:
self.parentNode = theParentNode;
答案 1 :(得分:0)
initWithParentNode应该在Node:
中定义- (id) initWithParentNode: (Node *) parentNode_ {
if ((self = [super init])) {
self.parentNode = parentNode_ ;
...
}
}
和从 SubNode调用:
- (id) initWithParentNode: (Node *) parentNode_ {
if ((self = [super initWithParentNode: parentNode_])) {
...
}
}