私はいくつかのアクションを実行する必要がある制御親クラスを持っています。これらのアクションは通常、非常に短い寿命を持っています。私は Factory クラスを使用してこれらのオブジェクトを作成していますが、それらの終焉を最もよく管理する方法と、複数のオブジェクトが安全に共存できるかどうかについていくつか質問があります。ここにいくつかの擬似コードの例があります:
@interface parent
@property (strong, nonatomic) abstractChild* action;
- (abstractChild*) makeConcreteChildOfType:(Type)type;
- (void) performActionA;
- (void) performActionB;
- (void) performActionC;
...
- (void) performActionA;
{
self.action = [self makeConcreteChildOfType:A];
[self.action doYourThing];
}
- (void) performActionB;
{
self.action = [self makeConcreteChildOfType:B];
[self.action doYourThing];
}
私は非常に多くの異なるタイプのアクションを持っており、各子アクション クラスは何をしなければならないか、いつそれを終了するかを知っています。1 つの抽象プロパティを持つ代わりに、さまざまなタイプの具体的なアクションごとに個別のプロパティを作成し、各子オブジェクトがデリゲートを介して終了したときに親に通知するようにすることもできますが、特に複数のアクションの場合は少し面倒です。同じ型が同時にアクティブになる可能性があります (各型のオブジェクトへのポインターの配列が必要になります)。したがって、子オブジェクトが自分自身、特に自分の破壊を管理できるかどうか/どのように管理できるか疑問に思っています。
各オブジェクトが次のように見える場合:
@implementation ChildObjectA
-(void) doYourThing
{
[self retain];
do something
}
- (void) OnCompletion
{
[self release];
}
それでは、これは安全ですか?-親クラスは同じタイプの複数のオブジェクトを作成できますか?それらはそれぞれが必要な限り存続し、完了すると効果的に削除され、並行して存在し、問題なく完了すると自分自身を削除できますか?
親クラスのactionプロパティはおそらく必要ないのですが、もし残っていればメモリ管理に問題がないか確認したいのですが?self.action が ARC に割り当てられるたびに、関連する子オブジェクトが解放されるとは思いませんが、子オブジェクトが解放されるまで削除されませんか?