패키지 닫기 중의 강력한 인용 순환
클로즈업도 본질적으로 인용 유형이기 때문에 클로즈업과 상하문 포획 변수(또는 상수) 사이에 강한 인용 유형이 나타날 수 있다. 모든 포획 변수나 상수에서 강한 인용 순환 문제가 발생하는 것은 아니다. 클로즈업을 대상의 특정한 속성에 부여하고 이 클로즈업이 이 대상을 사용해야만 클로즈업 강한 인용 순환이 발생한다.
class Employee {
var no:Int
var firstName:String
var lastName:String
var job:String
var salary:Double
init(no:Int,firstName:String,lastName:String,job:String,salary:Double){
self.no = no
self.firstName = name
self.lastName = name
self.job = job
self.salary = salary
println(" \(firstName) ")
}
deinit{
println(" \(firstName) ")
}
lazy var fullName:()->String = {
return self.firstName + "." + self.lastName
}
}
var emp:Employee? = Employee(no:10,firstName:"tom",lastName:"chen",job:"IT",salary:1000.0)
println(emp!.fullName())
emp = nil
2. 폐쇄 중의 강한 인용 순환을 해결한다
클로즈업 강제 인용 순환 문제를 해결하는 데는 두 가지 방법이 있다. 약인용과 무주인용이다. 도대체 약인용을 써야 하는지 무주인용을 해야 하는지 두 대상 간의 선택 조건과 같다. 만약에 클로즈업과 포획 대상이 항상 서로 인용하고 동시에 소각된다면 클로즈업 내의 성명은 무주인용이고 포획 대상이 때로nil일 수도 있을 때 클로즈업 내의 포획 성명은 약인용이다.만약 포획된 대상이 절대적으로nil이 되지 않을 경우, 주 인용이 없는 것을 사용해야 한다
1. 일반 형식
lazy var 클립: <클립 매개 변수 목록>-><클립 반환값>={
[unowned 포획 대상] <패키지 매개 변수 목록>-><반환값 유형> in
또는 [weak 포획 대상] <패키지 매개 변수 목록>-><반환값 유형> in
}
예제
lazy var fullName:()->String = {
[weak self](firstName:String,lastName:String)->String in
//폐쇄체
}
2. 약어 형식
lazy var 클립: <클립 매개 변수 목록>-><클립 반환값>={
[unowned 포획 대상] in
또는 [weak 포획 대상] in
//폐쇄체
}
예제
lazy var fullName:()->String = {
[weak self] in
//폐쇄체
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JavaScript 역할 도메인 클로즈업 상세 정보JavaScript에는 동적 역할 영역이 없으며 구문 역할 영역만 있습니다.어법 작용역은 코드를 쓰거나 정의를 말할 때 확정되고, 동적 작용역은 실행할 때 결정된다.패키지를 닫기 전에 먼저 우리는 어법 작용역이 무엇...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.