Ios [自添加子视图:_stateLabel=[UILabel mj_label];我不知道';我不明白

Ios [自添加子视图:_stateLabel=[UILabel mj_label];我不知道';我不明白,ios,objective-c,Ios,Objective C,我正在研究源代码,并找到以下代码: - (UILabel *)stateLabel { if (!_stateLabel) { [self addSubview:_stateLabel = [UILabel mj_label]]; // there I can not understand, how it execute? } return _stateLabel; } 该行: [self addSubview:_stateLabel = [UILabe

我正在研究源代码,并找到以下代码:

- (UILabel *)stateLabel
{
    if (!_stateLabel) {
        [self addSubview:_stateLabel = [UILabel mj_label]]; // there I can not understand, how it execute?
    }
    return _stateLabel;
}
该行:

[self addSubview:_stateLabel = [UILabel mj_label]];
[self addSubview:_stateLabel = [UILabel mj_label]];
我不明白,它是如何执行的?
首先执行
[UILabel mj_label]

它的形式很差,但该语句依赖于赋值语句
(a=b)
的值为
b
这一事实。因此,更清晰(更详细)的表述方式是:

// ...
_stateLabel = [UILabel mj_label];
[self addSubview:_stateLabel];
// ...
该行:

[self addSubview:_stateLabel = [UILabel mj_label]];
[self addSubview:_stateLabel = [UILabel mj_label]];
相当于:

_stateLabel = [UILabel mj_label];
[self addSubview:_stateLabel];
在C(和Objective-C)中,赋值表达式的结果与赋值相同

所以当你这样做的时候:

[self addSubview:_stateLabel = [UILabel mj_label]];
想象一下括号在那里:

[self addSubview:(_stateLabel = [UILabel mj_label])];
这类事情的形式很糟糕,因为想象一下
if
语句中的一个简单输入错误:

if (someInt = 5) {
}
你的意思是:

if (someInt == 5) {
}
在第一个错误的
if
语句中,首先将值5赋值(而不是比较)给
someInt
。然后,
if
查看
5
的结果,并将该非零值视为true。因此,无论
someInt
的原始值是什么,它都将始终变为
5
,并且
if
将始终计算为true