我知道使用此链接Difference between closure and Computed property计算属性和闭包之间的区别。
我们能够以两种方式编写闭包,参见一个例子,
var computedProperty:String{
return "computedProperty"
}
var clouserFirst = { (name: String) -> String in
return "Hello \(name)"
}
var clouserSecond:String = {
return "Hello clouserSecond"
}()
如果我在班上写两个闭包,那么
第二次关闭是第一次调用,在上面的链接中解释,之后只返回那些值 但是第一种类型的闭包是在我们调用这个闭包时调用,闭包是一个引用类型。见closure in apple document。
我知道计算属性的功能与函数相同,因为它不会在内存中存储任何值。
所以,我的问题是内存分配如何以两种方式发生关闭。任何人都可以帮助我理解这两个闭包之间的功能和区别吗?
答案 0 :(得分:2)
在第一个闭包中,一个参数作为参数传递,你的var是(String) -> String
类型,而第二个是一个闭包初始化,你用一个闭包初始化一个String
var
主要区别在于两个变量的类型,一个是String类型,而另一个是(String) -> String
类型为闭包,换句话说,在第一种情况下,您声明String
并赋值而在第二个中你将一个闭包声明为var并指定一个值
答案 1 :(得分:1)
您已在此处定义了两个存储的属性。
这两个属性将在它们所在对象的初始化时分配内存。
让我们尝试调试,看看我们是否正确。
在上面的屏幕截图中,我在创建Test对象后立即停止了调试指针。您可以在调试控制台中看到已初始化存储的属性及其各自的类型。
在第二个屏幕截图中,我打印了这些属性/变量的内存地址,以确认它们确实是在初始化时创建的。甚至不需要调用closureFirst
来获取内存分配,并且在返回stringFromClosure
所持有的字符串后,创建stringFromClosure
的闭包已被销毁。