Question: I am studying from the Stanford CS193P from Paul Hegarty. Then I see something like this, which I also see other people using:

```
- (id)init
{
    self = [super init];
    if (self) {
        [self someSetupFunctions];
    }
    return self;
}

```

Isn't that redundant? Why not just use:

```
- (id)init
{
    self = [super init];
    [self someSetupFunctions];
    return self;
}

```

I thought that messages to nil just fizzle, so why not use this second format?

Answer: 
What's really meant by `[self someSetupFunctions]` is some initialization code, not just a single method call, and a number of important things will fail if `self` is nil. Most notably, attempting to assign initial values to instance variables will crash.
The `self = [super init]; if (self)` test is because some initialisers will return different objects, including `nil` if it's impossible to create an object that satisfies the condition required by the initialiser.

In your own initialiser you need to defend against the superclass doing that, because if you try to access an instance variable on `nil` you're definitely doing the wrong thing (whether it crashes as a result or not: it usually will).