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