Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 课堂上的快速记忆管理_Swift_Memory Management - Fatal编程技术网

Swift 课堂上的快速记忆管理

Swift 课堂上的快速记忆管理,swift,memory-management,Swift,Memory Management,我有一个案例,我不知道a对象是否会被释放。这与类a中作为参数函数的函数func b有关 这是问题的简单表示: class A { func a() { } func b(_: ()->()) { } func doThm() { b(a) } } var a = A() a.doThm() 由于类A没有存储的属性,因此不可能有保留周期 调用函数(闭包)不会创建保留周期。存储闭包可能。函数b不以函数作为参数,它

我有一个案例,我不知道
a
对象是否会被释放。这与类
a
中作为参数函数的函数
func b
有关

这是问题的简单表示:

class A {

    func a() {

    }

    func b(_: ()->()) {

    }

    func doThm() {
        b(a)
    }
}



var a = A()
a.doThm()

由于类
A
没有存储的属性,因此不可能有保留周期


调用函数(闭包)不会创建保留周期。存储闭包可能。

函数
b
不以函数作为参数,它以
Void
/
()
/
单元的值作为参数。对不起,不太清楚您要问什么?变量
a
包含对对象的强引用,因此它不会被释放(不管采用闭包作为参数的方法如何)。我编辑我的问题。抱歉,这是错误的示例,对于更新的代码:只要
b
不接受函数,因为不应该有任何所有权周期,并且
A
-对象不会卡在内存中。我编辑了我的问题,使问题更清楚。你是对的,我测试了这一点。只有当我在变量中保存closer时,我才会收到视网膜圆。但是,请您解释一下为什么存储闭包可以保留循环?*保留循环,然后阅读