Gre*_*reg 7 objective-c ios objective-c-blocks
昨天我的最新iOS版本在Xcode上没有任何警告.在一夜之间升级到版本9.3(9E145)之后,我收到了多个警告.当我试图self->score下面的答案(1)对一个类似问题的警告消失.
但是在最近对同一个问题的回答(2)中,通过改变设置来解决问题.目前我的设置Apple LLVM 9.0 - Warnings -Objective C and ARC是
在块内隐含保留"自我"是的
但我不明白Block implicitly retains 'self'在下面的代码的上下文中是什么意思,所以我不能说这种行为是否是"有意"的.或者我是解决了问题还是只是隐藏了它.或者答案1是否比答案2更好.
有人可以解释Block implicitly retains 'self'在这种情况下的意义吗?谢谢.
score.alpha = 1.0;
if (sequenceState >= STATES_Count)
{
[GraphicScore animateWithDuration:8.0f
delay:1.0f
options:UIViewAnimationOptionCurveEaseOut
animations:^{self->score.alpha = 0.0;} // animations:^{score.alpha = 0.0;}
completion:^(BOOL finished){ }];
}
[self addSubview:score];
Run Code Online (Sandbox Code Playgroud)
Rob*_*Rob 17
关于隐式引用的这个警告self是有用的,因为在没有它的情况下,当浏览代码时,并不总是很明显哪些块有引入强引用循环的风险,哪些不具有.通过鼓励程序员self明确地提供这些引用(例如安全编程语言(如Swift)中所需),您最终会得到代码,您可以清楚地看到强引用周期是否是潜在问题.
所以,我鼓励你打开警告但继续self使用self->或者,如果使用属性,使用self.你引用的第一个答案所建议的那些显式隐藏引用(ivars).
然后,您可以查看self闭包的各个用途,并确保它们不会引入强参考周期的任何实际风险.如果他们这样做,您可以适当采用weakSelfor weakSelf/ strongSelfpatterns.
| 归档时间: |
|
| 查看次数: |
5587 次 |
| 最近记录: |