Purpose of if(self == [super init]) Checking for equality makes no sense and is just wrong. Assigning is because super may return a different object. Why in Objective-C, we use self = [super init] instead of just [super init]? link So why assign the value returned from [super init] to self? Looking at a typical initializer method: - ( id ) initWithString :( NSString *) aString { self = [ super init ]; if ( self ) { instanceString = [ aString retain ]; } return self ; } Why do we assign [super init] to self here? The textbook reason is because [super init] is permitted to do one of three things: Return its own receiver (the self pointer doesn't change) with inherited instance values initialized. Return a different object with inherited instance values initialized. Return nil, indicating failure. In the first case, the assignment has no effect on self and the instanceString is set on in the orig...