Table of Contents

การจัดการหน่วยความจําแบบ โอปติเมชันเป็นปัจจัยสําคัญในการส่งมอบโปรแกรมไอเอสที่มีประสิทธิภาพสูง การใช้หน่วยความจําอย่างมีประสิทธิภาพ ผลกระทบโดยตรง การใช้งานแบตเตอรี่ ชีวิตและความพึงพอใจโดยรวม ขณะที่การอ้างอิงของแอปเปิล (ARC) อัตโนมัตินั้น ส่วนมากแล้ว อัตโนมัตินั้น อัตโนมัตินั้น นักแสดงต้องตั้งใจใช้กลยุทธ์ในการหลีกเลี่ยงการรั่วไหลของหน่วยความจํา ลดความจําลง ลดความกดของหน่วยความจําลง บทความนี้จะให้ผลให้การใช้งานที่ครอบคลุม การใช้งานหน่วยความจํา ครอบคลุมทั้งโปรแกรม, การอ้างอิงหลัก, การปฏิบัติ, เทคนิคที่มีประสิทธิภาพสูง, และหลีกเลี่ยงการปล่อยสารพิษ

การจัดการหน่วยความจํา OS

IOS ใช้การนับวัตถุอัตโนมัติ (ARC) เพื่อจัดการวงจรชีวิต ARC ไม่ป้องกันปัญหาความจําทั้งหมดได้โดยอัตโนมัติ เช่น การแก้ไขประเภทอ้างอิง, โครงข่ายข้อมูล, และทรัพยากร ยังสําคัญอยู่

วิธี ที่ อาร์ซี ทํา งาน

ทุก ๆ ตัวชนิดอ้างอิง (คลาส) มีจํานวนที่จํากัด เมื่อคุณกําหนดให้อ้างอิงถึงตัวแปร ARC จะเพิ่มค่าของตัวแปร เมื่อตัวแปรนั้นหมดขอบเขตหรือตั้งค่าให้ [FLT: 2] ARC ลดลงจํานวน วัตถุจะถูกจองไว้เมื่อนับถึงศูนย์ การจัดวางผังนี้เป็นตัวชี้สําคัญในการจัดการจัดการการจําแนกของระบบย่อย แต่จะแนะนําความเสี่ยง [FT] วงจร [0] [0] ที่วัตถุที่ยึดเห่ ข้อความที่แน่นหนาสองตัว ป้องกันไม่ให้มีการจําแนกกันได้ โดยจะป้องกันการจําแนกของอื่น ๆ

ทั้ง แข็ง แรง และ ไม่ มี ข้อ อ้างอิง

ARC รองรับประเภทอ้างอิง 3 ประเภท:

  • [FLT: 0]. strong (ค่าปริยาย: resciation the recury the record. วัตถุนี้ยังคงอยู่ตราบเท่าที่อย่างน้อยหนึ่งอ้างอิงที่แข็งแกร่งมีอยู่.
  • [FLT: 0]]. weak: ไม่ได้เพิ่มจํานวนของที่ยึดไว้ การอ้างอิงจะถูกตั้งค่าให้โดยอัตโนมัติ [FLT: 3] เมื่อวัตถุถูกจัดวางให้ใช้งานแบบชั่วคราว ใช้ส่วนที่อ่อนแอเพื่อหลีกเลี่ยงการวน (เช่น คุณสมบัติตัวแสดงสําหรับแสดงเนื้อหา).
  • [FLT: 0] Untown : คล้ายกับอ่อนแอ แต่ถือว่าวัตถุอ้างอิงไม่เคยกลายเป็น [FLT: 4] ในช่วงชีวิตของอ้างอิง ใช้[FTT: 5] อ้างอิงหลังการย้ายถิ่นที่ทําการทําให้เวลาทํางานล้มเหลว priness [FLT: 6] พรีเฟฟเฟอร์ [FLT: 6] เว้นแต่คุณจะมีวัตถุที่มีอายุการใช้งานจริงอยู่

การ เข้าใจ ความ แตก ต่าง เหล่า นี้ เป็น สิ่ง จําเป็น เพื่อ ป้องกัน ไม่ ให้ ความ จํา รั่ว และ ขัดข้อง.

ฝึกใช้หน่วยความจําอย่างดีที่สุด

การ นํา กิจ ปฏิบัติ เหล่า นี้ ไป ใช้ อย่าง สม่ําเสมอ ช่วย ลด ความ จํา, ปรับ ปรุง ประสิทธิภาพ, และ ลด ความ เสี่ยง ที่ จะ ถูก ลด ลง โดย นาฬิกา ความ จํา ไอ โอเอส.

โพรไฟล์กับอุปกรณ์ปรับแต่งเสียง

เครื่อง มือ สําคัญ ๆ รวม ถึง:

  • [FLT: 0] ] Algents : แทร็กเสียงวัตถุที่สร้างขึ้นและจัดการจัดการพื้นที่ ใช้คุณสมบัติของ "รุ่นพิเศษ" เพื่อเปรียบเทียบการใช้งานหน่วยความจําระหว่างการกระทํา
  • [FLT: 0]. เล็คส์: ตรวจจับวัตถุที่รั่วโดยอัตโนมัติ. เรียกใช้อุปกรณ์นี้บ่อยระหว่างการพัฒนา.
  • [FLT: 0] แทร็กเกอร์: เฝ้าดูหน่วยความจําเสมือน รวมทั้งหน้าสกปรก ซึ่งสามารถให้ข้อมูลที่เป็นประโยชน์มากกว่าการใช้งานรวมสําหรับข้อมูลขนาดใหญ่

ทํา การ วิเคราะห์ ดู ส่วน หนึ่ง ของ การ ทํา งาน ที่ คุณ กําลัง พัฒนา โดย เฉพาะ อย่าง ยิ่ง ก่อน จะ ออก มา.

ตอบโต้การแจ้งเตือนหน่วยความจํา

IOS ส่ง [FLT: 9] เมื่อระบบมีหน่วยความจําต่ํา การไม่ตอบสนองอาจนําไปสู่การชนได้ การชดเชย [FLT: 10] ในมุมมองตัวควบคุมที่จะปลดปล่อย:

  • วัตถุแคช (e.g., [FLT: 11] หรือพจนานุกรมกําหนดเอง
  • ภาพขนาดใหญ่ที่สามารถเรียกใหม่ได้จากดิสก์
  • มุมมองแบบจําลองหรือข้อมูลที่ไม่มีความสําคัญ

การกําหนดตัวอย่าง:

override func didReceiveMemoryWarning() {
 super.didReceiveMemoryWarning()
 imageCache.removeAllObjects()
 thumbnailCache.removeAllObjects()
 // Clear any other disposable resources
}

นอก จาก นี้ ขอ พิจารณา การ โหม กระหน่ํา [FLT: 13] เพื่อ ให้ มี ทรัพยากร ที่ ไม่ จําเป็น เมื่อ ไม่ มี การ ออก ความ เห็น.

หลีก เลี่ยง การ วัฏจักร ของ วัฏจักร

วงจรการวนเป็นหน่วยความจําที่มากที่สุดรั่วไหลใน ISOS แอพ

  • [FLT: 0]. การแบ่งประเภท: ประกาศคุณสมบัติการเสนอชื่อเป็น .
  • [FLT: 0] Clos : เมื่อมีการปิดการดักจับ และถูกเก็บไว้โดย ใช้รายการจับ:[FLT: 17] หรือ.
  • [FLT: 0] ปิดฉาก : ปรับใช้รายการเก็บรายการอย่างสม่ําเสมอในแต่ละปิดที่จับการอ้างอิงของตัวเอง

ตัวอย่างการปิดอย่างปลอดภัย:

networkManager.fetchData { [weak self] result in
 guard let self = self else { return }
 self.updateUI(with: result)
}

ใช้[FLT: 20] เฉพาะเมื่อนายมั่นใจ ว่า [FLT: 21] จะไม่มีการจัดการการจองโต๊ะก่อนการปิด (เช่น animations ชั่วคราว).

ปรับแก้ความบิดเบือนของข้อมูล

การโหลดข้อมูลไม่จําเป็นไปยังทรัพยากรที่เสียความทรงจํา ใช้เทคนิคเหล่านี้:

  • [FLT: 0] ตื่นเต้น ตื่นตาตื่นใจ : ชักช้าการสร้างวัตถุแพงจนจําเป็น
  • [FLT: 0]. สืบค้นเมื่อ [FLTT:1] : ด้วยข้อมูลหลัก ใช้ [FLT: 22] จํากัด และขนาดชุดเพื่อหลีกเลี่ยงการโหลดวัตถุทั้งหมดเข้าความจําพร้อมกัน.
  • [FLT: 0] ใช้ [FLT: 24] แทน[FLT: 25] เพื่อแคช (FLT:25] — มันขับไล่วัตถุโดยอัตโนมัติภายใต้ความดันความจํา
  • [FLT: 0]] ภาพย่อ [FLT: 1]: เมื่อแสดงภาพตัวอย่าง สร้างรุ่นที่ย่อขยายโดยใช้ เพื่อหลีกเลี่ยงการเก็บภาพเต็มเวลาไว้ในหน่วยความจํา

สําหรับการตอบสนองเครือข่าย, Deserutionize Json uply ([FLT: 27] with [FLT: 28] หรือใช้ Profiles ที่ไหลวนอย่าง พร้อมโหลดขนาดใหญ่

Rellation Offices ในการควบคุมมุมมอง

ตัวควบคุมมุมมองมักจะเป็นเจ้าของทรัพยากรมากมาย: ผู้สังเกตการณ์ ผู้จับเวลา ผู้จดจําท่าทาง และโครงสร้างข้อมูลขนาดใหญ่

  • ลบการลงทะเบียนผู้สังเกตการณ์ ([[FLT: 31], KVO)
  • ตัวจับเวลาและตัวแสดงที่อยู่เชื่อมโยงไม่ถูกต้อง
  • ยกเลิกปฏิบัติการของเครือข่ายเมื่อออกจากหน้าจอ
  • ตั้งค่าวัตถุหนักที่สามารถใช้ได้ in

เทคโนโลยีการจัดการหน่วยความจําขั้นสูง

สําหรับแอพที่ผลักดันข้อจํากัด เช่น คนที่มีข้อมูลมากมาย การประมวลผลแบบเรียลไทม์ หรือการประมวลผลพื้นฐานนั้น จําเป็น

ใช้ สระ น้ํา แบบอัตโนมัติ

สระว่ายน้ําอัตโนมัติ จะทําการระบายน้ําอัตโนมัติเมื่อสิ้นสุดการวนรอบการวน แต่สามารถรวบรวมวัตถุได้หลายชิ้นระหว่างวงเวียนหนัก (เช่น การประมวลผลอาร์เรย์ขนาดใหญ่). การห่อเอาวัตถุวนในสระอัตโนมัติเพื่อปล่อยวัตถุให้เร็วขึ้น:

for i in 0..<100000 {
 autoreleasepool {
 let heavyObject = createHeavyObject(i)
 // use heavyObject
 }
}

นี่จะช่วยลดการใช้หน่วยความจําสูงสุดได้อย่างมาก [FLT: 0] เอกสารเกี่ยวกับแอ่งน้ําอัตโนมัติ อธิบายกลไกในรายละเอียด

ชนิดค่า vs. ชนิดอ้างอิง

การสร้างแบบแบบ Swicks (ชนิดค่า) จะถูกจัดเก็บในบรรทัด และสามารถลดการเรียงแบบ alpackages ได้ โดยมีลําดับของวัตถุแบบพื้นฐานที่มี semantics แต่โปรดสังเกตว่า การสร้างขนาดใหญ่สามารถทําให้ค่าหรือค่าการคัดลอกเพิ่มขึ้นได้ โปรดใช้ [FLT: 35] ห่อหรือ [FT: 36] กับ [FLT: 37] สําหรับโครงสร้างที่ซับซ้อน

กําลังเรียกหน่วยความจํา

สําหรับข้อมูลขนาดใหญ่ (vidio, ฐานข้อมูล), ใช้การจับคู่หน่วยความจําร่วมกับ เพื่อโหลดข้อมูลโดยไม่ใช้พื้นที่สลับกัน ในสวิฟสามารถถูกสร้างด้วยตัวเลือก [FLT: 40] ซึ่งจะทําให้การโหลดแบบขี้เกียจและหลีกเลี่ยงการใช้งานหน่วยความจําแบบสองแบบ (disk chas v in-mory)

if let data = try? Data(contentsOf: fileURL, options: .mappedIfSafe) {
 // use data — pages are loaded on demand
}

การจับคู่หน่วยความจํา มีประสิทธิภาพโดยเฉพาะ สําหรับข้อมูลแบบอ่านอย่างเดียว เช่น พจนานุกรม หรือ สินทรัพย์แบบเติมข้อมูล

การตั้งค่าพื้นหลัง

เมื่อมีการทํางานเบื้องหลัง (เช่น [FLT: 42]) ความจําจะจํากัดการใช้งานหน่วยความจําระหว่างการประมวลผลพื้นหลังเพื่อหลีกเลี่ยงการยุติการทํางาน ใช้ เพื่อจัดการสถานการณ์การจําลองต่ํา หรือการหน่วงการปฏิบัติการขนาดใหญ่ต่อการทํางาน

ประเด็น เรื่อง ความ จํา และ วิธี แก้ ทั่ว ไป

แม้ จะ มี การ วาง แผน อย่าง รอบคอบ ปัญหา ความ จํา ก็ อาจ ปรากฏ ออก มา.

วัตถุ ซอมบี้ และ เครื่อง ชี้ นํา ที่ น่า ทึ่ง

วัตถุที่เกินค่าไปทําให้เกิดอุบัติเหตุด้วย เปิดใช้งานวัตถุซอมบี้ที่วิเคราะห์ในรูปแบบของ XCode เพื่อตรวจสอบค่าเหล่านี้ระหว่างการพัฒนา สาเหตุรากมักมีความไม่สอดคล้องกันระหว่างการอ้างอิงที่แข็งแกร่งและอ่อน โดยเฉพาะกับตัวแทนที่ถูกปล่อยก่อนกําหนด หรือตั้งค่าให้เหมาะสม [FT: 45]

กําลังตรวจจับหน่วยความจําที่ลอยได้พร้อมกับเครื่องราชอิสริยาภรณ์

เรียกใช้อุปกรณ์ของ Leaks ขณะที่ทําการ mave ทั่วไป โปรดสนใจเป็นพิเศษ:

  • แสดงการเปลี่ยนตัวควบคุม (putch/ pop)
  • การนําเสนอทางช่องสี
  • จัดเก็บจดหมายที่อ้างอิงถึง
  • ไลบรารีแบบส่วนที่สาม

ถ้า มี การ รั่ว เข้า มา จง ตรวจ ดู กราฟ อ้างอิง ใน เครื่อง มือ กราฟ ความ จํา ดีบั๊ก (เครื่อง ดีบั๊ก ใน ความ จํา ของ XC).

หนวด แห่ง ความ จํา และ สาเหตุ ที่ แท้ จริง

หมุดหน่วยความจําที่เลื่อนลอย มักเกิดจาก:

  • [FLT: 0] การโหลดภาพ [[FLT: 1]: จะลดขนาดภาพลงเป็นขนาดที่ต้องการในการแสดงผลเสมอ ใช้ สําหรับภาพตัวอย่าง
  • [FLT: 0] Json Speccesing: Deserialize Json in backs หรือใช้ Profiles ที่ไหลมาอย่างกว้างขวางเพื่อตอบสนองอย่างมหาศาล
  • [FLT: 0] ข้อมูลที่เติบโตอย่างไม่มีขอบเขต : กําหนดข้อจํากัดบน และกวาดล้างแคชชั่วคราวอย่างทันที
  • [FLT: 0] สืบค้นตัวจับเวลาหรือ CA Displaylink: แน่ใจว่าตัวมันจะถูกปรับให้ใช้งานไม่ได้เมื่อไม่สามารถใช้งานได้

ติดตามหน่วยความจําสูงสุดด้วยเครื่องมือ Altspaces และตั้งค่าจุดพักหน่วยความจําเพื่อจับจุดแหลม

รูปแบบการวน

Offication Economy Epps ใน ISS apps เป็นกระบวนการที่ผสมกันของความเข้าใจใน ARC กับกระบวนการวิเคราะห์การเข้ารหัสแบบวินัยและวิเคราะห์ทั่วไป เริ่มด้วยพื้นฐานที่อ่อนลง