In general, classes "extend" or "inherit from" other classes. That means they perform all the functions of the "parent" class, also called a "super class" , plus whatever functions you add.
If you check the your .h file, you'll see that your class extends some other class, probably NSobject.
Code:
@interface MyClass : NSObject
The superclass usually performs important setup in its init method, you you had better call it using [super init] if you want it to be run when your init is called.
In the same vein, if someone ever subclasses your class you want to make sure they run your init method, right? So they call [super init] which runs your init method which calls [super init] which runs NSObject's init method. That's the chain Mr Jack mentioned.
Extra credit:
The reason you say self=[super init] is that for some classes "init" can return a different address than the one it was called on. This only happens in specialized cases like singletons, but you should code for it anyway.