在Swift中为Underscore分配变量
发布时间:2020-12-14 17:44:20 所属栏目:百科 来源:网络整理
导读:在研究了 Swift中关于下划线的stackoverflow之后,我理解下划线意味着a)忽略这个函数,b)你可以在使用方法时省略参数名.我不明白如果我们将变量分配给下划线会发生什么?通过为变量分配下划线,这会使来自Xcode的编译器警告静默读
在研究了
Swift中关于下划线的stackoverflow之后,我理解下划线意味着a)忽略这个函数,b)你可以在使用方法时省略参数名.我不明白如果我们将变量分配给下划线会发生什么?通过为变量分配下划线,这会使来自Xcode的编译器警告静默读取“初始化程序的结果未使用”,但如果不以任何方式使用此变量,则不会显示警告.
这个变量是否仍然被创建并存储在内存中,或者被编译器一起忽略,好像它是一行被注释掉的代码? 例如: 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() 输出:
扩展测试: func test() { print("test") _ = ToDoItem(title: "Item 1") for i in 2...4 { _ = ToDoItem(title: "Item (i)") } _ = ToDoItem(title: "Item 5") print("end test") }
请注意,第2,第3和第4项已取消初始化,因为它们在每个循环中超出范围.当test()完成时,第1项和第5项在超出范围时被取消初始化. 在应用程序内 正如德米特里·普洛特尼科夫在his answer年指出的那样,上述情况仅适用于斯威夫特游乐场.在应用程序中,结果是:
这告诉我们: >创建对象.>他们立即被释放. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |