在研究了 Swift中关于下划线的stackoverflow之后,我理解下划线意味着a)忽略这个函数,b)你可以在使用方法时省略参数名.我不明白如果我们将变量分配给下划线会发生什么?通过为变量分配
这个变量是否仍然被创建并存储在内存中,或者被编译器一起忽略,好像它是一行被注释掉的代码?
例如:
func test_ToDoItem_TakesTitle(){
let firstToDoItem = ToDoItem(title: "First Instance Title")
_ = ToDoItem(title: "First ToDoItem instance")
XCTAssertEqual(firstToDoItem.title, "First Instance Title")
}
以下代码行是创建并存储在内存中还是被忽略:
_ = ToDoItem(title: "First ToDoItem instance")
希望这个问题有意义,因为我想要注意Xcode中每个内存的使用方式.
此测试显示对象在对象超出范围时创建然后销毁:class ToDoItem {
var title = ""
init(title: String) {
self.title = title
}
deinit {
print("deinit \(title)")
}
}
func test() {
print("test")
_ = ToDoItem(title: "First")
_ = ToDoItem(title: "Second")
print("end test")
}
func callTest() {
print("calling test()...")
test()
print("back from test()")
}
callTest()
输出:
06001
扩展测试:
func test() {
print("test")
_ = ToDoItem(title: "Item 1")
for i in 2...4 {
_ = ToDoItem(title: "Item \(i)")
}
_ = ToDoItem(title: "Item 5")
print("end test")
}
06003
请注意,第2,第3和第4项已取消初始化,因为它们在每个循环中超出范围.当test()完成时,第1项和第5项在超出范围时被取消初始化.
在应用程序内
正如德米特里·普洛特尼科夫在his answer年指出的那样,上述情况仅适用于斯威夫特游乐场.在应用程序中,结果是:
06004
这告诉我们:
>创建对象.>他们立即被释放.
