viewDidLoad на самом деле является методом UIViewController, а не UIView. Он вызывается после загрузки представления в память (после вашего метода init, но до awakeFromNib). Вы заметите, что addSubview: принимает UIView в качестве параметра, поэтому представление должно быть загружено для того, чтобы представление было добавлено в другое представление. В противном случае вы бы попытались добавить воображаемое представление.
В ответ на ваш вопрос, да, это должно быть сделано. viewDidLoad вызывается задолго до того, как вы добавите Subview. Фактически, если вы удалите строки addSubview :, вы заметите, что он все еще вызывается (потому что вы создаете контроллер представления).