คุณสามารถนำภาษาที่รู้จักในชื่อ Swift และเปลี่ยนชื่อเป็น "Swift with ARC" จากนั้นคุณสามารถสร้างภาษาใหม่ที่ชื่อว่า "Swift with GC" ที่มีไวยากรณ์เดียวกันทั้งหมด แต่มีการรับประกันน้อยลงเมื่อวัตถุถูกจัดสรรคืน
ใน Swift with ARC เมื่อจำนวนการอ้างอิงคือ 0 วัตถุจะไป ด้วยการรวบรวมขยะตราบใดที่คุณมีการอ้างอิงที่อ่อนแอคุณสามารถกำหนดการอ้างอิงที่อ่อนแอไปยังการอ้างอิงที่แข็งแกร่งเพื่อ "กู้คืน" วัตถุ (ใน Swift เมื่อจำนวนการอ้างอิงคือ 0 การอ้างอิงแบบอ่อนจะไม่มี) นั่นคือความแตกต่างที่สำคัญ
และแน่นอนว่า Swift กับ ARC รับประกันได้ว่าการฆ่าจำนวนการอ้างอิงครั้งสุดท้ายจะเป็นการยกเลิกการจัดสรรวัตถุทันที ตัวอย่างเช่นคุณอาจมีคลาส FileWriter ซึ่งคุณไม่ได้รับอนุญาตให้มีสองอินสแตนซ์ที่เขียนไปยังไฟล์เดียวกันที่มีอยู่ในเวลาเดียวกัน ใน Swift with ARC คุณสามารถพูด oldWriter = nil; newWriter = FileWriter (... ) และคุณจะรู้ว่า FileWriter ใหม่จะถูกสร้างขึ้นหลังจากลบไฟล์เก่าเท่านั้น (เว้นแต่คุณจะเก็บการอ้างอิงอื่นไว้) ใน Swift with GC สิ่งนี้จะไม่ทำงาน
ความแตกต่างอีกอย่างหนึ่งก็คือใน "Swift with ARC" วัตถุที่ถูกอ้างอิงผ่านวัฏจักรการอ้างอิงที่แข็งแกร่ง แต่ไม่สามารถเข้าถึงได้จริงรับประกันว่าจะไม่ถูกจัดสรรคืน
deinit
คำหลักและความหมายที่เกี่ยวข้องนั้นเป็นสิ่งที่ทำให้การอ้างอิงมีความสำคัญอย่างยิ่งในภาษามากกว่าการนำไปใช้จริง