2010-11-08 18 views
6

Là một lập trình viên mới hơn, tôi đã khám phá ra sự kỳ diệu của NSlog và sử dụng tất cả thông qua mã của tôi. Nó rất hữu ích (cùng với NSZombieEnabled) khi gỡ lỗi.Có chi phí để sử dụng NSLog một cách tự do không?

Tôi có thể thấy lần truy cập hiệu suất nhất định trên trình mô phỏng vì nó in ra tất cả nội dung này. Tôi không nghĩ rằng tôi thấy bất kỳ hit như vậy trên các thiết bị, nhưng tôi không chắc chắn.

Vì vậy, bạn có mất bất kỳ chi phí nào để rời khỏi tất cả các số NSLogs không? Có sử dụng nhiều bộ nhớ hơn trên thiết bị không? Hay trình biên dịch chỉ bỏ qua chúng, giống như nó bình luận khi tôi biên dịch cho một thiết bị?

EDIT:

Dưới đây là những gì tôi thực hiện, theo gợi ý từ rano.

Trong file App_Prefix.pch của tôi, tôi nói thêm:

// DLog is almost a drop-in replacement for NSLog 
// DLog(); 
// DLog(@"here"); 
// DLog(@"value: %d", x); 
// Unfortunately this doesn't work DLog(aStringVariable); you have to do this instead  DLog(@"%@", aStringVariable); 
#ifdef DEBUG 
# define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__); 
#else 
# define DLog(...) 
#endif 

// ALog always displays output regardless of the DEBUG setting 
#define ALog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__); 

Và sau đó trong Project Info thanh tra của tôi, cho cấu hình Debug , dưới tiêu đề GCC 4.2 - Preprocessing, Tôi đã thêm giá trị DEBUG vào mục nhập cao nhất được gọi là, Preprocessor Macros.

Hoạt động như một nét duyên dáng - DLog kết quả đầu ra khi tôi tạo một phiên bản DebugALog luôn là kết quả đầu ra.

+0

Xem thêm [Có đúng là một người không nên sử dụng NSLog() trên mã sản xuất không?] (Http://stackoverflow.com/questions/300673/is-it-true-that-one-should-not-use -nslog-on-production-code) –

Trả lời

7

NSLog chắc chắn là nhiều hơn pricy so với đơn giản printf nhưng được tích hợp nhiều hơn vào khung mục tiêu C và Cocoa.

Bằng cách khi bạn đang nghiêm túc lập trình, bạn sẽ nhận thấy rằng nó không đủ cho hầu hết các nhu cầu của bạn. Hãy xem điều này article và tham chiếu của nó để có một ý tưởng về cách thay thế nó một cách thông minh.

Bằng cách đó, bạn cũng có thể yêu cầu trình biên dịch bỏ qua nó khi nó không hữu ích hơn (ví dụ: khi bạn sẽ phát hành đoạn mã của bạn). Nói chung, bạn có thể #ifdef gọi điện đến chức năng nhật ký trong các vòng lặp/chuỗi mã hóa chuyên sâu.

+4

Tôi chỉ muốn đăng cùng một liên kết. Đặc biệt là bình luận 15 của Bill Hollings đáng xem –

+0

@fluchtpunkt vâng rằng headr rất hữu ích. Mặc dù tôi thích một tên ngắn hơn cho chức năng ghi nhật ký của tôi, một cái gì đó giống như 'DNSLog' và theo cách này tôi có thể dễ dàng chuyển đổi những cái trước đó – rano

0

NSLog không được triển khai dưới dạng macro, vì vậy chắc chắn sẽ có chi phí. Định lượng nó và quyết định xem điều đó có quan trọng hơn không. Cách chắc chắn duy nhất để làm điều đó là đo lường ứng dụng của riêng bạn.

0

Câu trả lời ở trên đã lỗi thời. Bạn chỉ cần sử dụng CocoaLumberjack là vượt trội so với NSLog và cung cấp nhiều chức năng hơn sau đó các câu trả lời ở trên.

Các vấn đề liên quan