Еще одна вещь. Если у вас есть метод фабрики, который применяется к классу и его подклассам, вы можете (вероятно, должны) сделать это:
+(Fruit*) fruit
{
[[[self alloc] init] autorelease];
}
Это означает, что если вы вызовете метод с подклассом, вы получите объект правильного типа, например
Fruit* apple = [Apple fruit];
Конечно, вам нужно предоставить метод init для Apple, который предоставляет подходящее значение по умолчанию для iSeeds, а затем вызывает -initWithSeeds: