// AClass.m
// init
enemyBullets = [[NSMutableArray alloc] initWithCapacity:0];
enemy1 = [[Enemy alloc] initWithBullets:enemyBullets];
// At some point
NSMutableArray *bulletsToDelete = [NSMutableArray array];
for(BulletEnemy *thisBullet in enemyBullets)
{
// If I have to delete
[bulletsToDelete addObject: thisBullet];
}
[enemyBullets removeObjectsInArray:bulletsToDelete];
//dealloc method
[enemyBullets release];
[enemy1 release];
現在、敵の内部で、ある時点で次のことを行っています。
// Enemy.m
- (id)initWithBullets:(NSMutableArray*) _bullets{
// Enemybullets is a var of Enemy
enemyBullets = _bullets;
}
// At some point...
myBullet = [[BulletEnemy alloc] init];
[enemyBullets addObject:myBullet];
[myBullet release];
問題は、Aclass で次のことを行うときです。
[enemyBullets removeObjectsInArray:bulletsToDelete];
保持カウントが 0 ではないため、BulletEnemy 内の dealloc メソッドが呼び出されません。なぜですか? しかし、(enemyBullets を解放する) ACLass を解放すると、弾丸の割り当てが解除されます。