Agree on the first point, but I think the reason it needs to be in viewDidLoad is because it needs to be added again if the system unloads the view for whatever reason. Only having it in setup, which is only called via the init methods, precludes this.