Was just doing a code review and started to wonder:
I thought if (self = [super init]) checks whether assigning return value of [super init]
if (self = [super init])
[super init]
"An assignment expression has the value of the left operand after the assignment" (C99), so either way it has the value of variable, as you put it. The extra parentheses make no difference (except possibly for warnings).