对不起,但我知道这是一个非常愚蠢的问题,我已经“知道”了答案,但我需要有人向我明确解释为什么答案就是这样。为什么不引用一个函数之外创建保留循环?
最近,我经历了一些有关各种内存问题的恶梦调试之后,对代码中的保留周期和内存泄漏有点痴迷/偏执,所以将来我想将它们扼杀在萌芽状态。但是,在阅读并学习了许多关于ARC并在Swift中保留循环之后,尽管它很有意义,但我仍然没有足够的“直觉”或自然的感觉,以确信我能找到一个,或者缺乏一个,因为我在编码。所以我开始变得有点偏执狂,即使我没有意识到这一点,我甚至会用基本的东西来创建保留周期。
因此,考虑到这一点,为什么没有任何使用声明的变量的普通函数创建保留周期?例如:
class someClass {
let a = "I'm letter a"
let moreLetters = addLetters()
func addLetters() -> String {
let newString = a + "bcdefg"
return newString
}
}
在这种情况下,self.moreLetters引用功能addLetters,然后恒定self.a是从功能addLetters内引用。那么如果我不抓住弱/无主的自我,这会创造一个保留周期吗?对我来说,这种简单的事会导致问题似乎是荒谬的......或者它是什么?在嵌套函数中怎么样,像这样:
func someFunction() -> String {
let a = "I'm letter a"
func addLetters() -> String {
let newString = a + "bcdefg"
return newString
}
let moreLetters = addLetters()
return moreLetters
}
这是否也会创建保留循环? (是的,我知道这是一个执行简单任务的复杂方式;我只是用这个代码作为例子来说明我的观点)。
我是否变得超级偏执狂,并且正在严重推翻事物?
'let moreLetters = addLetters()'编译错误。 – bubuxu
在Swift中,字符串是值类型而不是引用类型,因此在您的示例中不会出现引用循环。你可以使用参考类型来更改你的问题吗? –