我有类似以下的功能
class Bar {
deinit {
print("Do some cleanup")
}
}
func foo() -> Bar {
return Bar()
}
Bar
的范围在这样调用时很明确:
func useFoo() {
let bar = foo()
runFunctionA()
// bar goes out of scope: "Do some cleanup" is printed
}
然而,当忽略返回值时会发生什么,会立即超出范围吗?
func useFoo() {
let _ = foo()
// "Do some cleanup" is printed here?
runFunctionA()
// "Do some cleanup" is printed here?
}
此外,如果使用let _ = foo()
或仅使用_ = foo()
,会有所作为吗?
答案 0 :(得分:1)
在第二种情况下,没有人取得返回对象的所有权,因此ARC立即释放该对象。因此,您必须在Do some cleanup
致电之前看到runFunctionA()
。
此外,let _ = foo()
与_ = foo
现在,当你必须在游乐场看不同的结果时,你一定在想我写的废话。
问题是,游乐场不是用于检查与内存相关的代码。请参阅this。
如果您不信任我,只需在实际项目中检查您的代码。我确定。
<强>栏:强>
class Bar {
deinit {
print("Do some cleanup")
}
class func foo() -> Bar {
return Bar()
}
}
<强>的ViewController:强>
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
useFoo()
useFooAgain()
}
func useFoo() {
let bar = Bar.foo()
print("inside useFoo")
}
func useFooAgain() {
let _ = Bar.foo()
print("inside useFooAgain")
}
}
<强>输出:强>
里面使用福佑
做一些清理
做一些清理
在里面使用富有想法