스위프트 프로그래밍 언어 가이드는 다음과 같은 예를 가지고 : 그것은 deinit() 메소드에 문자열을 출력 할 것으로 예상했다객체가 해제되지
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 {
println("\(name) is being deinitialized")
}
}
var paragraph:HTMLElement? = HTMLElement(name: "p", text: "hello, world")
println("\(paragraph!.asHTML())")
paragraph = nil
를하지만, 인쇄하지 않은 아무것도. 객체가 아직 살아 있고 closure에 대한 참조주기가 강하다는 것을 의미합니다. 누구도 같은 문제가 있습니까? 이 놀이터에있는 경우 놀이터 환경 변수의 연락을 취하는 유지하는 것 같다
의 약한 캡처와 곰이 작업을 수행합니다 (아마도 그들을 다른 디버깅 인쇄.) 시도 실제 프로젝트에서 같은 코드를 사용하여 예상 결과를 얻는 지 확인하십시오. –
감사. main.swift 파일의 실제 프로젝트 코드를 실행합니다. – LongNV