패키지 닫기 중의 강력한 인용 순환

예제
클로즈업도 본질적으로 인용 유형이기 때문에 클로즈업과 상하문 포획 변수(또는 상수) 사이에 강한 인용 유형이 나타날 수 있다. 모든 포획 변수나 상수에서 강한 인용 순환 문제가 발생하는 것은 아니다. 클로즈업을 대상의 특정한 속성에 부여하고 이 클로즈업이 이 대상을 사용해야만 클로즈업 강한 인용 순환이 발생한다.
        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 
//폐쇄체
}

좋은 웹페이지 즐겨찾기