swift 关于闭包值捕获问题

tech2023-06-05  136

闭包在其定义的上下文变量中捕获常量和变量,即使这些常量和变量的原域已经不存在了,闭包仍然可以在闭包函数体内引用和修改这些值。问题探究,到底原域消失之后,这些变量是复制了一份在闭包引用内,还是之前变量或者常量都复用

func test(){ let myincr = increatmFunStr(Other: "BOB") print(myincr()) print(myincr()) print(myincr()) print(myincr()) } //获取变量地址 func address(o:UnsafeRawPointer) -> String { return String.init(format: "%018p", Int(bitPattern: o)) } public func increatmFunStr(Other baseStr:String)->()->String{ var totostr:String = "" print("FF baseStr-->" + address(o: baseStr)) print("FF totostr-->" + address(o: totostr)) func increat()->String{ totostr = totostr + baseStr print("baseStr-->" + address(o: baseStr)) print("totostr-->" + address(o: totostr)) return totostr } return increat } 执行结果 FF baseStr-->0x0000600000c46ed0 FF totostr-->0x0000600000c46f90 baseStr-->0x0000600000c46f90 totostr-->0x0000600000c46fc0 BOB baseStr-->0x0000600000c46ed0 totostr-->0x0000600000c46f90 BOBBOB baseStr-->0x0000600000c46fc0 totostr-->0x0000600000c46ed0 BOBBOBBOB baseStr-->0x0000600000c46f90 totostr-->0x0000600000c46fc0 BOBBOBBOBBOB 地址确实变化了,复制了一份副本
最新回复(0)