Последняя утечка памяти.ObjectAtIndex возвращает автоматически освобожденный объект.Во втором примере вы теряете память, выделенную alloc.
Первый правильный.Если вы обсуждаете создание экземпляров, то обычно есть три метода, один, например, [NSArray alloc] init], другой [NSArray array], который является ярлыком для [[NSArray alloc] init] autorelease] и [arrayкопия], которая создает копию.Во всех случаях, кроме автоматически выпущенных, вы должны освободить память самостоятельно.Objective-C построен вокруг проходящих указателей.Поэтому, если есть какой-то метод, который возвращает указатель, вам не нужно ничего выделять или инициализировать.И общее эмпирическое правило: кто бы ни выделял память, он должен отвечать за освобождение, либо он должен быть автоматически освобожден.