ฉันมีแอปพลิเคชันที่เขียนด้วยภาษา Cocoa พร้อมด้วย ARC ซึ่งช่วยให้ผู้ใช้สามารถสร้างและเปิดหน้าต่างใหม่ได้ (มันก็เหมือนกับโมเดลเอกสาร แต่ฉันไม่ได้ใช้ nsdocument)
หน้าต่างใหม่แต่ละหน้าต่างต้องใช้หน่วยความจำจำนวนมาก ซึ่งฉันต้องการเรียกคืนหากผู้ใช้ปิดหน้าต่าง
ฉันเข้าใจว่า [window close]
เพียงซ่อนหน้าต่าง แต่ฉันก็ใช้ [[self window] setReleasedWhenClosed:YES]
เช่นกัน แต่ทั้ง NSwindowcontroller
และหน้าต่างยังคงมีอยู่หลังจากปิด
อ็อบเจ็กต์ในไฟล์ xib ของหน้าต่างของฉันมีอาร์เรย์ c ขนาดใหญ่จำนวนหนึ่งที่จัดสรรด้วย malloc ดังนั้นฉันจึงได้ลองปล่อยพวกมันออกโดยส่งการเรียกไปยังศูนย์การแจ้งเตือนภายในเมธอด windowWillClose:
ของ windowcontroller โดยที่การแจ้งเตือนจะเรียกเมธอดภายในอ็อบเจ็กต์ที่เกี่ยวข้อง เพื่อเพิ่มอาร์เรย์ C ก่อนที่หน้าต่างจะปิด อีกครั้ง สิ่งนี้จะไม่มีผลใด ๆ แม้ว่าวิธีการพยายามปล่อยอาร์เรย์จะถูกเรียกและเห็นได้ชัดว่าอาร์เรย์นั้นถูกปล่อยว่างตาม Activity Monitor แต่ไม่มีหน่วยความจำใดถูกปล่อยออกมา ฉันได้ลองปล่อยอาร์เรย์ใน -(void) dealloc
แล้ว แต่ดูเหมือนว่าจะไม่ถูกเรียกเมื่อปิด
ดังนั้นฉันจะได้รับหน่วยความจำกลับคืนได้ดีที่สุดเมื่อปิดหน้าต่างอย่างไร
แก้ไข: ตามความคิดเห็นในหน้า stackoverflow นี้ โดย Benoit
"การเปิดตัวเมื่อปิดจะถูกละเว้นสำหรับหน้าต่างที่เป็นของตัวควบคุมหน้าต่าง"
เป็นเรื่องจริงเหรอ? หากเป็นเช่นนั้น ฉันจะแก้ไขสิ่งนั้นใน ARC ได้อย่างไร