2012-01-25 46 views
18

Tôi muốn biết về sự khác biệt giữa các NSLogPrintf tuyên bố trong ObjectiveC (đối với mục đích ứng dụng ...!)Sự khác nhau giữa NSLog và tuyên bố printf cho ObjectiveC

Tại sao tất cả các nhà phát triển sử dụng NSLog thay vì Printf?

Cả hai trông giống nhau, nhưng sự khác biệt trong hoạt động nội bộ là gì?

Tại thời điểm nào chúng có thể được phân biệt?

Trả lời

29
  • printf() là một chức năng thư viện chuẩn C, chấp nhận một chuỗi C không đổi (const char *) như là đối số định dạng của nó. printf() ghi vào thiết bị xuất chuẩn.

  • NSLog() là một chức năng Foundation, chấp nhận một NSString liên tục như định dạng, và có một bộ format specifier mở rộng (ví dụ, printf() đối tượng in does't theo quy định của %@, NSLog() không). NSLog() cũng in tên và ngày xử lý trước khi in định dạng thực tế và ghi vào sdterr.

Về cơ bản, chúng ta có thể nói rằng NSLog() là một mở rộng printf() chức năng Style cho Objective-C (chính xác hơn, Cocoa và Cocoa Touch) và mục đích cụ thể.

8

Từ quan điểm của nhà phát triển, sự khác biệt lớn nhất là NSLog hỗ trợ các loại đối tượng Objective-C thông qua định dạng% @. NSLog cũng viết để stderr, trong khi printf viết để stdout.

3

tôi thấy hai khác biệt chính giữa NSLogprintf:

  1. NSLog hỗ trợ NSString đối tượng thông qua việc gia hạn %@;

  2. hơn nữa, NSLog tự động thêm dữ liệu thời gian và quá trình (ví dụ: 2012/01/25 17: 52: 10,479 quá trình [906: 707])

+1

Chính xác hơn: 'NSLog hỗ trợ các đối tượng thông qua phần mở rộng% @, bằng cách ngầm gọi mô tả của đối tượng đó - (NSString *); Phương thức ' –

+0

Sự khác biệt lớn thứ ba là NSLog gửi đầu ra tới stderr, trong đó printf gửi tới stdout. – Munim

20

NSLog giống như một printf, nhưng nó nhiều hơn một chút:

  • Dấu thời gian được thêm vào đầu ra.
  • Đầu ra được gửi đến bàn điều khiển Xcode hoặc bất kỳ điều gì được định nghĩa là stderr.
  • Nó chấp nhận tất cả các thông số printf, nhưng nó cũng chấp nhận toán tử @ cho các đối tượng hiển thị chuỗi được cung cấp bởi phương thức description của đối tượng. (description là một phần của NSObject, vì vậy tất cả các đối tượng có thể ghi đè lên nó để trả về một chuỗi mô tả đối tượng).
  • Đầu ra cũng được gửi tới Nhật ký hệ thống của Apple (ASL), là phiên bản syslogd của Apple. Dữ liệu này có thể được đọc bởi các ứng dụng khác bằng cách sử dụng API C hoặc bởi người dùng OS X bằng ứng dụng “Bảng điều khiển”.
+0

+1: Đẹp và súc tích. – ArtOfWarfare

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