私はスーパークラス 'Node'といくつかのサブクラスを持っています。 'SubNode1'、 'SubNode2'などサブクラス化が原因でメモリアクセスが不正になる、プロパティをどのように構造化するか
すべてのサブクラスで 'parentNode'と呼ばれるプロパティが必要です。 initが 'SubNode1'で呼び出され、オブジェクトが '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];
}
確かにより良いスタイルですが、元のバージョンではメモリの問題が発生する可能性があります。あまりにもARCに慣れて、明らかに:) –