позволяет разбить это на более мелкие куски:
1 - когда вы вызываете [super init] или создаете суперкласс, сначала запускается его функция init, чтобы он мог инициализировать ваш объект, который вы наследуете, обычно это будет NSObject или любой суперкласс, который вы решили расширить.
функции super init возвращают себя в конце этого процесса, так же, как вы выполняете свою функцию init
2 - когда вы делаете присваивание: self = [super init] вы фактически присваиваете это возвращаемое значение из вашего super в ваше собственное.
3 - , если вокруг этих назначений фактически оценивает успех / неудачу вызова super init, потому что в случае неудачи вы получили бы nil назад, а назначения имели бы был ноль к себе. поэтому оценка nil вернет false, и вы не запустите свой код инициализации.
4- в конечном итоге вы также возвращаете себя (ноль, если произошел сбой, или активировать объект, если это удалось)
надеюсь, что это прояснит.