Я пытаюсь понять вашу проблему, вот что, я думаю, вы говорите:
1.
A *a = [[A alloc] init];
2.
[category_type addObject:a];
3.
for(NSInteger f=0; f< [appDelegate.category_type count]; f++)
[category_type addObject:[appDelegate.category_type objectAtIndex:f]];
4.
A *a = [category_type objectAtIndex:i];
Вы должны рассказать нам больше о том, где вы выпускаете объекты - в (3) вы говорите, что «выпускаете этот первый массив класса B» - можете ли вы показать нам код?
Похоже, что вы сохраняете объект 3 раза, но не опубликовали никакого кода, чтобы показать, что он вообще освобождается.
Я думаю, что вам нужно сделать что-то более подобное:
1 & 2. (в классе B)
A *a = [[[A alloc] init] autorelease];
[category_type release];
category_type = [NSMutableArray alloc] init];
[category_type addObject:a];
3.(в классе C)
[category_type release];
category_type = [[NSArray arrayWithArray:appDelegate.category_type] retain];
4.
A *a = [category_type objectAtIndex:i];
(как в классе B, так и в методе dealloc C)
[release_type category];
Здесь объект a всегда сохраняется толькомассивы, в которых он находится - когда он вам больше не нужен, просто освободите массив, и он будет освобожден.Вам не нужно беспокоиться о том, чтобы удалить или освободить его самостоятельно, об этом позаботится авторелиз на шаге (1) и освободить массивы.