ฉันจะตั้งค่าNSZombieEnabled
และCFZombieLevel
สำหรับปฏิบัติการของฉันใน Xcode 4 ได้อย่างไร
ฉันจะตั้งค่าNSZombieEnabled
และCFZombieLevel
สำหรับปฏิบัติการของฉันใน Xcode 4 ได้อย่างไร
คำตอบ:
ใน Xcode 4.x กด
(หรือคลิกMenubar
> Product
> Scheme
> Edit Scheme
)
เลือกแท็บ "การวินิจฉัย" และคลิก "เปิดใช้งานออบเจ็กต์ซอมบี้":
สิ่งนี้จะทำให้วัตถุที่ถูกรีลีสกลายเป็นอินสแตนซ์ NSZombie ที่พิมพ์คำเตือนของคอนโซลเมื่อใช้อีกครั้ง นี่คือเครื่องมือช่วยในการดีบักที่เพิ่มการใช้หน่วยความจำ (ไม่มีการปล่อยวัตถุจริง ๆ ) แต่ปรับปรุงการรายงานข้อผิดพลาด
กรณีทั่วไปคือเมื่อคุณปล่อยวัตถุมากเกินไปและคุณไม่รู้ว่าตัวใด:
-[UITableView release]: message sent to deallocated instance
การตั้งค่า Xcode นี้จะถูกละเว้นเมื่อคุณเก็บถาวรแอปพลิเคชันสำหรับการส่ง App Store คุณไม่จำเป็นต้องแตะอะไรก่อนปล่อยแอปพลิเคชันของคุณ
การกด⌥⌘Rเหมือนกับการเลือกผลิตภัณฑ์> เรียกใช้ขณะที่Altกดปุ่มค้าง
การคลิกช่องทำเครื่องหมาย "เปิดใช้งานออบเจ็กต์ซอมบี้" จะเหมือนกับการเพิ่ม "NSZombieEnabled = YES" ด้วยตนเองในส่วน "ตัวแปรสภาพแวดล้อม" ของแท็บอาร์กิวเมนต์
CMD-<
( CMD-SHIFT-comma
) หรือProduct -> Scheme -> Edit SCheme...
คำตอบของ Jano คือวิธีที่ง่ายที่สุดในการค้นหา .. อีกวิธีหนึ่งคือหากคุณคลิกที่แถบเลื่อนลงของโครงการ -> แก้ไขรูปแบบ -> แท็บอาร์กิวเมนต์แล้วเพิ่ม NSZombieEnabled ในคอลัมน์ตัวแปรสภาพแวดล้อมและใช่ในคอลัมน์ค่า ...
ฉันพบว่าตัวเลือกนี้สะดวกกว่า:
Profile
Zombies
ทันทีที่ตรวจพบซอมบี้คุณจะได้รับ "Zombie Stack" ที่เรียบร้อยซึ่งจะแสดงให้คุณเห็นเมื่อมีการจัดสรรวัตถุที่เป็นปัญหาและที่ที่มันถูกเก็บหรือปล่อยออกมา:
Event Type RefCt Responsible Caller
Malloc 1 -[MyViewController loadData:]
Retain 2 -[MyDataManager initWithBaseURL:]
Release 1 -[MyDataManager initWithBaseURL:]
Release 0 -[MyViewController loadData:]
Zombie -1 -[MyService prepareURLReuqest]
ข้อดีเมื่อเปรียบเทียบกับการใช้แท็บการวินิจฉัยของ Xcode Schemes :
หากคุณลืมที่จะยกเลิกการเลือกตัวเลือกในแท็บการวินิจฉัยจะไม่มีการปล่อยวัตถุใด ๆ จากหน่วยความจำ
คุณได้รับสแต็กที่มีรายละเอียดมากขึ้นซึ่งแสดงให้คุณเห็นว่าวัตถุที่เสียหายของคุณได้รับการจัดสรร / เผยแพร่หรือเก็บไว้
iOS Simulator > All
จากรายการแม่แบบหลัก (คุณสามารถทำเช่นนี้ในการจำลอง)
ใน Xcode 4.2
หรือเลือกEdit Scheme
จากProduct
> Scheme
เมนู
เลือกEnable Zombie Objects
รูปแบบDiagnostics
แท็บ
หากคุณต้องการ.xcconfig
ไฟล์คุณสามารถอ่านบทความนี้https://therealbnut.wordpress.com/2012/01/01/setting-xcode-4-0-environment-variables-from-a-script/
Cocoa นำเสนอฟีเจอร์สุดเจ๋งที่ช่วยเพิ่มความสามารถของคุณในการดีบักสถานการณ์ดังกล่าว มันเป็นตัวแปรสภาพแวดล้อมที่เรียกว่า NSZombieEnabled ดูวิดีโอนี้ ที่อธิบายการตั้งค่า NSZombieEnabled ใน object-C
ใน Xcode> 4.3:
คุณคลิกที่แถบดร็อปดาวน์สกีม -> edit scheme -> แท็บอาร์กิวเมนต์จากนั้นเพิ่ม NSZombieEnabled ในคอลัมน์ Environment Variables และ YES ในคอลัมน์ค่า
โชคดี !!!