Latest web development tutorials

스위프트 소멸자 과정

클래스의 인스턴스가 해제되기 전에, 소멸자 즉시 호출된다. 사용 키워드 deinit , 소멸자를 표시하기 위해 유사한 초기화 기능을 사용하여 init 표시합니다. 소멸자는 클래스 유형에만 적용됩니다.


소멸자 프로세스 원리

스위프트는 자동으로 인스턴스가 더 이상 자원을 확보 할 필요가 해제되지 않습니다.

자동 참조 카운팅 (ARC)에 의해 스위프트 메모리 관리 인스턴스를 처리합니다.

일반적으로 수동 인스턴스가 청소 해제 할 필요가 없을 때. 자신의 자원을 사용하는 경우 그러나, 당신은 몇 가지 여분의 청소 작업을 수행해야 할 수 있습니다.

당신은 파일을 열고 일부 데이터를 쓸 수있는 사용자 정의 클래스를 만드는 경우 예를 들어, 파일을 닫습니다 클래스 인스턴스 이전에 출시해야 할 수 있습니다.

문법

클래스의 정의에서, 각각의 클래스는 많아야 하나의 소멸을 가질 수있다. 문구에서 괄호없이, 매개 변수없이 소멸자 :

deinit {
    // 执行析构过程
}

var counter = 0;  // 引用计数器
class BaseClass {
    init() {
        counter++;
    }
    deinit {
        counter--;
    }
}

var show: BaseClass? = BaseClass()
print(counter)
show = nil
print(counter)

위의 프로그램 실행 출력은 다음과 같습니다

1
0

쇼 = 닐 문이 실행될 때 계산기 마이너스 1을 참조하면, 메모리가 해방된다 나타낸다.

var counter = 0;  // 引用计数器

class BaseClass {
    init() {
        counter++;
    }
    
    deinit {
        counter--;
    }
}

var show: BaseClass? = BaseClass()

print(counter)
print(counter)

위의 프로그램 실행 출력은 다음과 같습니다

1
1