Typically, the reason why you’ll see code that calls super’s method is because you’re overriding that method in a subclass, but you only want your override to add behavior to the original super method. For example, in the viewDidLoad case, anything you add in your override after calling super’s viewDidLoad will be done in addition to that. You don’t need to know what super’s viewDidLoad method does. You just need to make sure you call it in your override, and then add whatever custom behavior you want after that.
I think that learning when to call super’s method is just a matter of experience. But it’s safe to say that overriding is one area where you’re most likely to see it. And all it means in most cases is that you’re duplicating functionality of the superclass’s method, and then adding your own custom behavior into the mix. The reason why programmers do this is so they don’t have to duplicate code, which would introduce all sorts of problems with keeping things consistent over time as a project becomes larger. They can simply override a super method, reuse the perfectly good code that already exists, and add more on top of that which will just be specific and tailored to the subclass. If the code executed in the super’s method ever needs to be changed, it will only need changing in one place.