อัปเดตสำหรับ Xcode 5 และ iOS 7
หมายเหตุ: สำหรับโซลูชันXcode 7 / Swift 2.1เพื่อลบคำสั่งprint ()ในรุ่นที่วางจำหน่ายค้นหาคำตอบของฉันที่นี่ที่นี่
ใช่คุณควรลบคำสั่ง NSLog ใด ๆ ในรหัสรุ่นของคุณเนื่องจากจะทำให้โค้ดของคุณช้าลงและไม่ได้ใช้ประโยชน์ใด ๆ ในเวอร์ชันรีลีส โชคดีที่ใน Xcode 5 (iOS 7) มันง่ายมากที่จะลบคำสั่ง NSLog ทั้งหมดของคุณโดยอัตโนมัติในเวอร์ชันสร้าง แล้วทำไมไม่ทำ
ขั้นแรกให้ทำ 3 ขั้นตอนจากนั้นจึงอธิบาย
1) ในโปรเจ็กต์ Xcode ของคุณค้นหาไฟล์ 'yourProjectName-prefix.pch' (โดยปกติคุณจะพบสิ่งนี้ภายใต้กลุ่ม 'ไฟล์สนับสนุน' ซึ่งเป็นที่ตั้งของไฟล์ main.m ของคุณ
2) เพิ่ม 3 บรรทัดต่อท้ายไฟล์ ".pch":
#ifndef DEBUG
#define NSLog(...);
#endif
3) ทดสอบความแตกต่างระหว่างเวอร์ชัน 'debug' และ 'release' วิธีหนึ่งในการดำเนินการนี้คือการใช้ "แก้ไขแบบแผน" -> "เรียกใช้ชื่อแอป" -> ใต้แท็บ "ข้อมูล" ให้เลือกโดยใช้ช่องแบบเลื่อนลงระหว่างการดีบักและการเปิดตัว ในเวอร์ชันรีลีสคุณจะไม่เห็นเอาต์พุต NSLog ในคอนโซลการแก้ปัญหา!
ทั้งหมดนี้ทำงานอย่างไร?
ก่อนอื่นเราต้องรู้ว่าพรีโปรเซสเซอร์ค่อนข้าง 'โง่' และทำหน้าที่เป็น 'ตัวแทนที่ข้อความ' ก่อนที่คอมไพเลอร์จะถูกเรียกใช้ มันแทนที่ทุกสิ่งที่คุณ '#define' ด้วยสิ่งที่ตามมาใน#define
ข้อความ
#define NSLog(...);
(...)
ยืนสำหรับ 'อะไร' ระหว่างวงเล็บ () ใจยัง;
ในตอนท้าย สิ่งนี้ไม่จำเป็นอย่างยิ่งเนื่องจากคอมไพเลอร์จะปรับให้เหมาะสมที่สุด แต่ฉันชอบใส่ไว้ที่นั่นเพราะมัน 'ถูกต้อง' มากกว่า หลังจากของเรา#define
ไม่มี 'อะไร' ดังนั้นตัวประมวลผลก่อนจะแทนที่ด้วย 'nothing' ดังนั้นมันจะทิ้งบรรทัดที่สมบูรณ์โดยเริ่มที่NSLog...
จนกระทั่งและรวมถึง;
.
กำหนดคำสั่งสามารถกำหนดเงื่อนไขโดยใช้#ifdef
(ถ้ากำหนด) หรือ#ifndef
(ถ้าไม่ได้กำหนดไว้)
ที่นี่เราเขียน#ifndef DEBUG
ซึ่งหมายความว่า 'หากไม่ได้กำหนดสัญลักษณ์ DEBUG' #ifdef
หรือ#ifndef
จำเป็นที่จะต้อง 'ปิด' ด้วย#endif
Xcode 5 กำหนดสัญลักษณ์ 'DEBUG' สำหรับเราโดยค่าเริ่มต้นเมื่อโหมด de build คือ 'DEBUG' ใน 'release' ไม่ได้กำหนดไว้ คุณสามารถตรวจสอบได้ภายใต้การตั้งค่าโปรเจ็กต์แท็บ 'สร้างการตั้งค่า' -> เลื่อนลงไปที่ส่วน 'Apple LLVM 5.0 - Preprocessing' -> มาโครตัวประมวลผลล่วงหน้า คุณจะเห็นว่าสัญลักษณ์ 'DEBUG' ไม่ได้ถูกกำหนดไว้สำหรับรุ่นที่วางจำหน่าย!
สุดท้ายไฟล์. pch จะถูกสร้างขึ้นโดย Xcode โดยอัตโนมัติและรวมอยู่ในไฟล์ต้นฉบับทุกไฟล์โดยอัตโนมัติในช่วงเวลารวบรวม ดังนั้นจึงเหมือนกับว่าคุณจะใส่ข้อมูลทั้งหมด#define
ลงในไฟล์ต้นฉบับแต่ละไฟล์