Ты уже на полпути. Вместо того, чтобы ваш UIViewController знал о том, как он был запущен, я предлагаю вам иметь различные места в вашем коде, которые создают контроллер представления, настраивают его во время или после создания с некоторой информацией относительно его желаемого поведения - например, конфигурируют, какой URL он должен скачать. Затем в viewDidLoad или в другом месте вашего контроллера представления вы можете просто сделать правильную вещь в зависимости от того, как был настроен ваш UIViewController.
Итак, в качестве убедительного примера, пусть метод init для вашего VC принимает в качестве параметра желаемый URL (или задает его как свойство). Затем позже в viewDidLoad (или где угодно) ваш VC может делать правильные вещи, не будучи «загрязненным» деталями, которые его не должны волновать (например, как он был помещен в пользовательский интерфейс и т. Д.)