0Pricing
Swift Academy · บทเรียน

ARC นับจำนวนการอ้างอิงอย่างไร

ทำความเข้าใจสิ่งที่ ARC ทำขณะคอมไพล์ การเรียก retain/release และอายุการใช้งานของอ็อบเจ็กต์

ARC นับจำนวนการอ้างอิงอย่างไร เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน

ยินดีต้อนรับ

Automatic Reference Counting (ARC) จัดการหน่วยความจำของอินสแตนซ์คลาส การเข้าใจวิธีนับการอ้างอิงช่วยให้คุณเขียนโค้ดที่ไม่มีหน่วยความจำรั่ว

ARC ทำอะไร

ARC ติดตามว่ามีการอ้างอิงแบบถือครองกี่รายการที่ชี้ไปยังอินสแตนซ์ของแต่ละคลาส เมื่อจำนวนนั้นเหลือศูนย์ ARC จะเรียก `deinit` และคืนหน่วยความจำโดยอัตโนมัติ

การอ้างอิงแบบถือครอง

```swift var a: Dog? = Dog(name: "Rex") // count = 1 var b = a // count = 2 a = nil // count = 1 b = nil // count = 0 → deinit ```

ARC ทำงานขณะคอมไพล์

ARC แทรกการเรียก retain/release ขณะคอมไพล์ ไม่ใช่ขณะทำงานเหมือนตัวเก็บขยะ ซึ่งหมายความว่า: • ไม่มีการหยุดชั่วคราวจากตัวเก็บขยะ • การคืนหน่วยความจำมีเวลาที่แน่นอน • ขนาดโค้ดเพิ่มขึ้นเล็กน้อยจากการเรียก retain/release

ความเสี่ยงจากวงจรการอ้างอิงแบบถือครอง

```swift class Node { var next: Node? } var n1: Node? = Node() var n2: Node? = Node() n1?.next = n2 n2?.next = n1 // cycle! n1 = nil; n2 = nil // both stuck at count=1 — leaked! ```

การนับด้วยตัวแปรหลายตัว

```swift class Engine {} var car1: Engine? = Engine() // count = 1 var car2 = car1 // count = 2 var car3 = car2 // count = 3 car1 = nil // count = 2 car2 = nil // count = 1 // Engine still alive — car3 holds it car3 = nil // count = 0 → deinit ```

ARC ในคอลเลกชัน

```swift var dogs: [Dog] = [] dogs.append(Dog(name:"A")) // count = 1 dogs.append(Dog(name:"B")) // count = 1 each dogs.removeAll() // both deinit called ```

ARC ไม่ใช้ (NOT) กับประเภทค่า

สตรักต์, enum และทูเพิลเป็นประเภทที่ ARC NOT นับจำนวนการอ้างอิง: ```swift struct Point { var x, y: Double } // no retain/release var p1 = Point(x:1,y:2) var p2 = p1 // copy — no ARC ```

สังเกต ARC ด้วย deinit

```swift class Cat { let name: String init(name: String) { self.name = name; print("\(name) born") } deinit { print("\(name) deallocated") } } var c: Cat? = Cat(name: "Luna") c = nil // "Luna deallocated" printed ```

ประสิทธิภาพของ ARC เทียบกับตัวเก็บขยะ

• ตัวเก็บขยะ (GC): หยุดการทำงานเป็นระยะเพื่อเก็บคืนหน่วยความจำ ซึ่งต้องแลกกันระหว่างอัตราการประมวลผลกับเวลาแฝง • ARC: คืนหน่วยความจำทันทีเมื่อจำนวนเหลือ 0 จึงไม่มีการหยุดชั่วคราว • ต้นทุนของ ARC: การกำหนดค่าแต่ละครั้งผ่านการอ้างอิงแบบถือครองจะมีต้นทุนเป็นคู่การเรียก retain/release

ตรวจสอบอย่างรวดเร็ว

ARC จะเรียก `deinit` และคืนหน่วยความจำของวัตถุเมื่อใด

สรุปทบทวน

ประเด็นสำคัญ: • ARC ติดตามการอ้างอิงแบบถือครองไปยังอินสแตนซ์ของคลาส • จำนวน 0 → เรียก `deinit` → คืนหน่วยความจำ • ARC ทำงานขณะคอมไพล์ จึงไม่มีการหยุดชั่วคราวจากตัวเก็บขยะ • ประเภทค่า (สตรักต์หรือ enum) ไม่ได้จัดการโดย ARC • วงจรจะป้องกันไม่ให้จำนวนเหลือ 0 → ใช้ weak หรือ unowned ถัดไป: วงจรการถือครอง

คำถามที่พบบ่อย

บทเรียน “ARC นับจำนวนการอ้างอิงอย่างไร” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ARC นับจำนวนการอ้างอิงอย่างไร” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ARC นับจำนวนการอ้างอิงอย่างไร”

ทำความเข้าใจสิ่งที่ ARC ทำขณะคอมไพล์ การเรียก retain/release และอายุการใช้งานของอ็อบเจ็กต์ คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “ARC นับจำนวนการอ้างอิงอย่างไร” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม

ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ARC นับจำนวนการอ้างอิงอย่างไร
  2. วงจรการคงอ้างอิง: สาเหตุและการตรวจหา
  3. การอ้างอิงแบบ weak และ unowned
  4. รายการจับค่าของโคลสเชอร์และ [weak self]
← กลับไปที่ Swift Academy