We just said that init methods like this one can return totally different objects. Remember
that instance variables are found at a memory location that’s a fixed distance from the hidden
self parameter. If a new object is returned from an init method, we need to update
self so that any subsequent instance variable references affect the right places in memory.
That’s why we need the self = [super init] assignment. Keep in mind that this assignment
affects the value of self only for this method. It doesn’t change anything outside the
method’s scope.