我有一个需要执行多个操作的控制父类,这些操作的寿命通常很短。我正在使用 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];
}
我有很多不同类型的动作,每个子动作类都知道它必须做什么以及何时完成。我可以为每种不同类型的具体操作创建单独的属性,而不是拥有一个抽象属性,并让每个子对象在完成时通过委托通知父对象,但是这开始变得有点混乱,尤其是当多个操作的事实同一类型可能会立即处于活动状态(这将需要指向每种类型对象的指针数组)。因此,我想知道子对象是否/如何管理自己,特别是它们自己的破坏。
如果每个对象看起来像这样:
@implementation ChildObjectA
-(void) doYourThing
{
[self retain];
do something
}
- (void) OnCompletion
{
[self release];
}
那么这样做安全吗?- 父类是否可以创建多个相同类型的对象,并且只要每个对象都需要并且在完成时有效地删除自己并且它们可以并行存在并在没有问题的情况下删除自己,它们都可以存活吗?
大概不需要父类的 action 属性,但是如果保留它,那么我想确认内存管理没有出现问题?我认为不是每次将 self.action 分配给 ARC 时都会释放关联的子对象,但在子对象释放自身之前它不会被删除?