元々どの言語もそういうものだろう。メモリー管理がプログラマかランタイム内かで意識するかしないかでしかない

MRCの場合でも、本当は呼び出し側が「単に」Releaseしてはダメなんだがな。arrayのオーナーシップを持つのはTestなので、arrayが Test nameList ですぐにオーナーシップを放棄したいなら、autorelease で。持ち続けるならそのコードのままで
呼び出し側が必要ならretainし(releaseする)ってのが、お約束