Cập nhật cho Xcode 5 và iOS 7
lưu ý: đối với giải pháp Xcode 7 / Swift 2.1 để loại bỏ các câu lệnh print () trong bản phát hành, hãy tìm câu trả lời của tôi tại đây .
Có, bạn nên xóa bất kỳ câu lệnh NSLog nào trong mã phát hành của mình, vì nó chỉ làm chậm mã của bạn và không có ích trong phiên bản phát hành. May mắn thay, trong Xcode 5 (iOS 7), việc loại bỏ tất cả các câu lệnh NSLog của bạn 'tự động' trong các bản dựng phát hành rất đơn giản. Vậy tại sao lại không làm.
Đầu tiên là 3 bước cần thực hiện, sau đó là một số giải thích
1) trong dự án Xcode của bạn, tìm tệp 'yourProjectName-prefix.pch' (thông thường bạn sẽ tìm thấy tệp này trong nhóm 'tệp hỗ trợ', nơi chứa tệp main.m của bạn
2) thêm 3 dòng này vào cuối tệp '.pch':
#ifndef DEBUG
#define NSLog(...);
#endif
3) kiểm tra sự khác biệt giữa phiên bản 'gỡ lỗi' và 'phát hành' của bạn. Một cách để làm điều này là thông qua 'chỉnh sửa lược đồ' -> 'chạy tên ứng dụng' -> trong tab 'thông tin', chọn bằng cách sử dụng hộp thả xuống giữa gỡ lỗi và phát hành. Trong phiên bản phát hành, bạn sẽ không thấy bất kỳ đầu ra NSLog nào trong bảng điều khiển gỡ lỗi!
Làm thế nào để tất cả điều này hoạt động?
trước hết, người ta phải biết rằng một bộ tiền xử lý tương đối 'ngu ngốc', và chỉ hoạt động như một 'bộ thay thế văn bản' trước khi trình biên dịch được gọi. Nó thay thế bất kỳ thứ gì bạn '#define' bằng những gì sau #define
câu lệnh.
#define NSLog(...);
Viết (...)
tắt của 'bất cứ thứ gì' giữa dấu ngoặc (). Tâm trí cũng ;
là cuối cùng. Điều này không hoàn toàn cần thiết vì trình biên dịch sẽ tối ưu hóa điều này đi, nhưng tôi muốn đặt nó ở đó, vì nó 'chính xác' hơn. Sau khi của chúng ta #define
là 'không có gì', vì vậy bộ tiền xử lý sẽ thay thế nó bằng 'không có gì', và do đó, nó sẽ loại bỏ dòng hoàn chỉnh, bắt đầu từ NSLog...
cho đến khi và bao gồm;
.
câu lệnh xác định có thể được thực hiện có điều kiện bằng cách sử dụng #ifdef
(nếu được định nghĩa) hoặc#ifndef
(nếu không được định nghĩa)
ở đây chúng tôi viết #ifndef DEBUG
, có nghĩa là 'nếu ký hiệu DEBUG không được xác định'. các #ifdef
hoặc#ifndef
cần phải 'đóng' với#endif
Xcode 5 xác định theo mặc định biểu tượng 'GỠ LỖI' cho chúng tôi khi chế độ xây dựng là 'GỢI Ý'. Trong 'phát hành', điều này không được xác định. bạn có thể xác minh điều này trong cài đặt dự án của mình, tab 'Cài đặt bản dựng' -> cuộn xuống phần 'Apple LLVM 5.0 - Tiền xử lý' -> macro tiền xử lý. Bạn sẽ thấy rằng ký hiệu 'GỠ LỖI' không được xác định cho các bản phát hành!
cuối cùng, tệp .pch được Xcode tạo tự động và tự động được đưa vào mọi tệp nguồn trong thời gian biên dịch. Vì vậy, nó giống như thể bạn đã đặt toàn bộ #define
vào mỗi tệp nguồn của mình.