gpt4 book ai didi

ios - block 隐式保留 'self' ; - 但这是有意的行为吗?

转载 作者:可可西里 更新时间:2023-11-01 03:36:37 24 4
gpt4 key购买 nike

昨天,我最新的 iOS 版本在 Xcode 上运行时没有出现警告。在一夜之间升级到版本 9.3 (9E145) 后,我收到了多个警告。当我在 answer (1) 之后尝试 self->score 时对于类似的问题,警告消失了。

但在最近的 answer (2)对于同一个问题,通过更改设置解决了问题。目前我对 Apple LLVM 9.0 - Warnings -Objective C and ARC 的设置是

Implicit retain of ‘self’ within blocks Yes

但我不明白 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];

最佳答案

这个关于对 self 的隐式引用的警告很有用,因为如果没有这个警告,当浏览代码时,并不总是很明显哪些 block 有引入强引用循环的风险,哪些没有。吨。通过鼓励程序员使这些 self 引用显式(例如 Swift 等安全编程语言所要求的),您最终得到的代码可以清楚地看到强引用循环是否是一个潜在的问题或不是。

因此,我鼓励您将警告保持打开状态,但继续使用 self-> 使那些隐式的 self 引用(ivars)显式,或者,如果使用属性,self.,如您引用的第一个答案所建议的那样。

然后您可以检查 self 闭包的那些单独使用,并确保它们不会引入任何强引用循环的实际风险。如果他们这样做,您可以根据需要采用 weakSelfweakSelf/strongSelf 模式。

关于ios - block 隐式保留 'self' ; - 但这是有意的行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49582124/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com