Оператор присваивания (=), кроме выполнения присваивания, также возвращает присвоенное значение. Это так, что вы можете делать такие вещи, как
a = b = 1;
Что для компилятора совпадает с написанием
a = (b = 1);
Это означает, что при выполнении
self = <some init function>;
Вы можете проверить успешность инициализации, поместив присваивание в оператор if. Если это удалось, он возвращает действительный указатель, который не равен нулю, что означает, что условие оператора if истинно. Если инициализация завершается неудачно, она возвращает ноль, который фактически равен нулю, поэтому нет смысла продолжать оставшуюся инициализацию.
Причина предупреждения заключается в том, что легко использовать (=) в операторе if вместо (==):
if ( a = 1 ) // Should be a == 1
{
// Do important stuff
}
Таким образом, компилятор пытается защитить вас от этой ошибки.
По этой причине я предпочитаю сделать условие явным, в вашем примере:
if ((self = [super initWithNibName:@"MainView" bundle:nil]) != nil)