当前位置:K88软件开发文章中心编程语言APP编程Swift01 → 文章内容

Swift 自动引用计数(ARC)

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-12 6:31:28

获了self,这意味着闭包又反过来持有了HTMLElement实例的强引用。这样两个对象就产生了循环强引用。解决闭包引起的循环强引用:在定义闭包时同时定义捕获列表作为闭包的一部分,通过这种方式可以解决闭包和类实例之间的循环强引用。弱引用和无主引用当闭包和捕获的实例总是互相引用时并且总是同时销毁时,将闭包内的捕获定义为无主引用。相反的,当捕获引用有时可能会是nil时,将闭包内的捕获定义为弱引用。如果捕获的引用绝对不会置为nil,应该用无主引用,而不是弱引用。实例前面的HTMLElement例子中,无主引用是正确的解决循环强引用的方法。这样编写HTMLElement类来避免循环强引用:class HTMLElement { let name: String let text: String? lazy var asHTML: () -> String = { [unowned self] in if let text = self.text { return "<\(self.name)>\(text)</\(self.name)>" } else { return "<\(self.name) />" } } init(name: String, text: String? = nil) { self.name = name self.text = text } deinit { print("\(name) 被析构") } }//创建并打印HTMLElement实例var paragraph: HTMLElement? = HTMLElement(name: "p", text: "hello, world")print(paragraph!.asHTML())// HTMLElement实例将会被销毁,并能看到它的析构函数打印出的消息paragraph = nil以上程序执行输出结果为:<p>hello, world</p>p 被析构

上一页  [1] [2] 


Swift 自动引用计数(ARC)