Как уже упоминалось, вам не нужно выпускать его дважды;один раз это все, что требуется.Однако вам не нужно вообще его отпускать, если вы используете autorelease:
UIView* cat = [[[UIView alloc] initWithFrame:someFrame] autorelease];
[self.view addSubview:cat];
[self.animals addObject:cat];
Объект cat будет освобожден к концу цикла RunLoop.Использование автоматического выпуска сделает ваш код чище и лучше справится с изменениями.
Также вам не нужны самоопределители для вида и животных, если вы не хотите отличать их от объектов локальной области видимости (это также будет плохопопрактикуйтесь, чтобы переменные локальной области именовались так же, как и члены ваших классов).