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

Instruments สำหรับการจัดสรรและการรั่วไหล

ติดตามการจัดสรรบนฮีป ค้นหาหน่วยความจำรั่ว และอ็อบเจ็กต์ซอมบี้

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

เครื่องมือ Allocations

เครื่องมือ Allocations จะติดตามการจัดสรรและคืนการจัดสรรบนฮีปทุกรายการ และแสดงการเพิ่มขึ้นของหน่วยความจำตามเวลา

// Instruments → Allocations template
// Shows live bytes, allocation count, and transient objects

การวิเคราะห์การเพิ่มขึ้นของฮีป

ทดลองใช้แอปของคุณและดูกราฟไบต์ที่ใช้งานอยู่ การเพิ่มขึ้นอย่างต่อเนื่องโดยไม่หยุดนิ่งบ่งชี้ว่ามีหน่วยความจำรั่ว

// Normal: allocations rise and fall as views appear/disappear
// Leak: allocations only grow, never released

การวิเคราะห์รุ่นของอ็อบเจ็กต์

ทำเครื่องหมายสแนปช็อตของรุ่นก่อนและหลังขั้นตอนการใช้งานของผู้ใช้ เพื่อดูว่าอ็อบเจ็กต์ใดคงอยู่โดยไม่คาดคิด

// Instruments toolbar → "Mark Generation"
// Perform action (e.g., open and close a screen)
// "Mark Generation" again
// Inspect objects in the new generation that weren't released

เครื่องมือ Leaks

เครื่องมือ Leaks จะสแกนฮีปเป็นระยะ และระบุอ็อบเจ็กต์ที่ถูกจัดสรรแต่ไม่สามารถเข้าถึงได้ ซึ่งมักเกิดจากวงจรการครอบครอง

// Run Leaks alongside Allocations in the "Leaks" template
// Red bars in the timeline = leaked objects detected
// Click a bar to see the leaked object graph

การอ่านกราฟหน่วยความจำรั่ว

กราฟอ็อบเจ็กต์ของ Leaks จะแสดงว่าอ็อบเจ็กต์ใดครอบครองกันเองเป็นวงจร และช่วยชี้ตำแหน่งต้นทางของวงจรการครอบครอง

// Example cycle:
// ViewController → ViewModel → Closure → ViewController
// Instruments draws the reference edges visually

การตรวจจับวงจรการครอบครองในคลอเชอร์

หน่วยความจำรั่วที่พบบ่อยที่สุดคือคลอเชอร์ครอบคลุม self อย่างแน่นหนา ขณะที่ self ก็เก็บคลอเชอร์นั้นไว้

class MyVC: UIViewController {
  var onComplete: (() -> Void)?
  override func viewDidLoad() {
    super.viewDidLoad()
    // LEAK: closure captures self; self holds onComplete
    onComplete = { self.dismiss(animated: true) }
    // FIX:
    onComplete = { [weak self] in self?.dismiss(animated: true) }
  }
}

เครื่องมือ VM Tracker

VM Tracker จะแสดงภูมิภาคหน่วยความจำเสมือนและเพจที่ถูกแก้ไข ความกดดันของหน่วยความจำที่ถูกแก้ไขสูงจะทำให้ iOS ยุติการทำงานของแอป

// Instruments → "VM Tracker" in allocation instrument
// Look for: large __DATA dirty pages, high CG raster memory

อ็อบเจ็กต์ซอมบี

เปิดใช้ Zombie Objects ใน Instruments เพื่อจับอ็อบเจ็กต์ที่ถูกคืนการครอบครองมากเกินไป อ็อบเจ็กต์เหล่านั้นจะถูกเปลี่ยนเป็น "ซอมบี" ซึ่งจะบันทึกเหตุการณ์เมื่อมีการเข้าถึง

// Instruments → Edit → Record Settings → Enable Zombie Objects
// Accessing a zombie prints: "*** -[MyObject method] sent to deallocated instance"

ภาพถ่ายฮีป

เปรียบเทียบสถานะฮีปสองสถานะด้วย "ภาพถ่ายฮีป" เพื่อค้นหาอ็อบเจ็กต์ที่ยังคงอยู่ระหว่างภาพถ่ายทั้งสอง เหมาะอย่างยิ่งสำหรับตรวจจับหน่วยความจำรั่วในตัวควบคุมมุมมอง

// After navigating to and from a screen twice:
// Heap should return to baseline
// Objects remaining in the diff = leaked view controllers or models

MetricKit สำหรับหน่วยความจำในระบบจริง

ใช้ MXMetricPayload เพื่อรวบรวมข้อมูลหน่วยความจำและประสิทธิภาพจากผู้ใช้จริงในระบบใช้งานจริง

import MetricKit
class AppDelegate: UIApplicationDelegate, MXMetricManagerSubscriber {
  func didReceive(_ payloads: [MXMetricPayload]) {
    payloads.forEach { print($0.memoryMetrics as Any) }
  }
}

ตรวจสอบความเข้าใจ

กราฟ "ไบต์ที่ใช้งานอยู่" ที่เพิ่มขึ้นอย่างต่อเนื่องในเครื่องมือ Allocations บ่งชี้อะไร

ทบทวนบทเรียน

ใช้ Allocations เพื่อติดตามการเพิ่มขึ้นของฮีปและสแนปช็อตของรุ่น ใช้ Leaks เพื่อตรวจจับวงจรการครอบครองและดูกราฟอ็อบเจ็กต์ ใช้ Zombie Objects สำหรับข้อผิดพลาดจากการคืนการครอบครองมากเกินไป แก้ไขคลอเชอร์ด้วย [weak self] และใช้ MetricKit เพื่อติดตามหน่วยความจำของผู้ใช้จริงในระบบใช้งานจริง

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

บทเรียน “Instruments สำหรับการจัดสรรและการรั่วไหล” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “Instruments สำหรับการจัดสรรและการรั่วไหล”

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

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

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

บทเรียน “Instruments สำหรับการจัดสรรและการรั่วไหล” ใช้เวลานานแค่ไหน

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

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

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

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

  1. พื้นฐาน Instruments: ตัววิเคราะห์เวลา
  2. Instruments สำหรับการจัดสรรและการรั่วไหล
  3. ตัวตรวจสอบเธรดหลักและการค้าง
  4. ปรับเส้นทางที่ใช้เวลามาก: COW การแทรกโค้ด และการปรับเฉพาะทาง
← กลับไปที่ Swift Academy