Swift - Deinitialization
ก่อนที่อินสแตนซ์คลาสจะต้องถูกยกเลิกการจัดสรร 'deinitializer' จะต้องถูกเรียกเพื่อยกเลิกการจัดสรรพื้นที่หน่วยความจำ คำหลัก 'deinit' ใช้เพื่อยกเลิกการจัดสรรพื้นที่หน่วยความจำที่ครอบครองโดยทรัพยากรระบบ Deinitialization ใช้ได้เฉพาะในประเภทคลาสเท่านั้น
Deinitialization เพื่อ Deallocate Memory Space
Swift 4 จะยกเลิกการจัดสรรอินสแตนซ์ของคุณโดยอัตโนมัติเมื่อไม่จำเป็นอีกต่อไปเพื่อเพิ่มทรัพยากร Swift 4 จัดการการจัดการหน่วยความจำของอินสแตนซ์ผ่านการนับอ้างอิงอัตโนมัติ (ARC) ตามที่อธิบายไว้ในการนับการอ้างอิงอัตโนมัติ โดยทั่วไปคุณไม่จำเป็นต้องทำการล้างข้อมูลด้วยตนเองเมื่อยกเลิกการจัดสรรอินสแตนซ์ของคุณ อย่างไรก็ตามเมื่อคุณทำงานกับทรัพยากรของคุณเองคุณอาจต้องดำเนินการล้างข้อมูลเพิ่มเติมด้วยตัวเอง ตัวอย่างเช่นหากคุณสร้างคลาสที่กำหนดเองเพื่อเปิดไฟล์และเขียนข้อมูลบางอย่างลงไปคุณอาจต้องปิดไฟล์ก่อนที่จะยกเลิกการจัดสรรอินสแตนซ์ของคลาส
var counter = 0; // for reference counting
class baseclass {
init() {
counter++;
}
deinit {
counter--;
}
}
var print: baseclass? = baseclass()
print(counter)
print = nil
print(counter)
เมื่อเรารันโปรแกรมข้างต้นโดยใช้สนามเด็กเล่นเราจะได้ผลลัพธ์ดังนี้ -
1
0
เมื่อคำสั่ง print = nil ถูกละไว้ค่าของตัวนับจะยังคงเหมือนเดิมเนื่องจากไม่ได้กำหนดค่าเริ่มต้น
var counter = 0; // for reference counting
class baseclass {
init() {
counter++;
}
deinit {
counter--;
}
}
var print: baseclass? = baseclass()
print(counter)
print(counter)
เมื่อเรารันโปรแกรมข้างต้นโดยใช้สนามเด็กเล่นเราจะได้ผลลัพธ์ดังนี้ -
1
1