There are differences between the two. Basically in the simple case (where you have a controller and MainMenu.nib) awakeFromNib is called after your GUI is loaded so all your outlets exist. init is called when the class is init'd (obviously) so your GUI outlets probably (definately?) won't exist.
I forgot to mention you could also make your controller the app delegate and write an implementation of
- (void)applicationDidFinishLaunching: (NSNotification* )aNotification;
which is called after everything's loaded but before the app is sent it's first event.
There are definite reasons for doing things at different times because your app may receive other messages (such as openFiles when the app is launched by clicking a document icon) before applicationDidFinishLaunching: