내가 알기로 Swift는 가비지 수집을 위해 자동 참조 계산을 사용합니다.
이것은 제가 COM 프로그래머 였을 때로 수년을 거슬러 올라갑니다.
VB6 (및 이전)은 객체가 범위를 벗어날 때 참조 횟수를 줄이는 프로세스를 자동화했습니다. 대부분의 경우 프로그래머가 메모리 관리를 잊어 버리는 데 충분했습니다.
그러나 객체 사이에 루프가 있다면 .eg
Car->WheelsCollection contains pointers to wheels
Wheel->CurrentCar constrains a pointer to the car the wheel is currently installed on
그런 다음 자동차의 인스턴스가 범위를 벗어 났을 때 자동차는 바퀴가 살아 있고 바퀴가 살아 있기 때문에 쓰레기 수거되지 않습니다.
이 문제를 피하거나 완화하기 위해 Swift에서 어떤 프로그래머 패턴 또는 기타가 사용됩니까?
이것은 간단한 유지주기이며 약한 참조를 사용하여 해결해야합니다.
이것을 현재 수업으로 가정합니다.
class Car {
var wheel: Wheel?
}
class Wheel {
var currentCar: Car?
}
그리고 현재 상황
var myCar: Car? = Car()
var myWheel: Wheel? = Wheel()
myCar!.wheel = myWheel
이를 해결하려면 그 중 하나를으로 선언해야합니다 . weak
예 : weak var currentCar: Car?
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다