2012-06-25 40 views
14

(Tôi là một người mới bắt đầu ca cao và) Tôi tự hỏi tại sao chúng ta nên làm:Hiểu NSLog cú pháp

NSLog(@"this is the variable value: %d",variable); 

và không phải cái gì như thế này:

[NSLog outputThis:@"this is the variable value: %d" param:variable]; 
+1

Bởi vì câu lệnh thứ hai gọi 'outputThis: param:' method on 'NSLog' object. 'NSLog' chỉ là một hàm trong khuôn khổ Cocoa. – Eimantas

+0

có nhưng nó có thể là một phương thức lớp cho một lớp NSLog, như [NSString stringWithString: @ "đây là một chuỗi"]; ? – tahir

+0

NSLog không "âm thanh" như lớp học. NSLogger sẽ là lựa chọn tốt hơn cho một tên lớp. Bây giờ nó chỉ là một hành động. – Eimantas

Trả lời

18

Tôi đồng ý điều này khá khó hiểu khi bạn bắt đầu. Lý do chính là phương pháp NSLog, giống như nhiều người khác trong Core Foundation, là một API dựa trên C, chứ không phải là một API mục tiêu-C. Các hàm kiểu C trông giống như myFunction (myParameter1, myParameter2).

Tất cả các công cụ GUI bạn có thể sử dụng để [UIView presentModalViewController:] vv dựa trên một API mục tiêu-C, với dấu ngoặc vuông mà bạn đã thấy cho các hàm (được gọi là bộ chọn trong Obj-C). Ngôn ngữ Objective-C nằm trên đầu trang của C, vì vậy bạn sẽ tìm thấy cả hai kiểu trong hầu hết các ứng dụng.

+0

Apple quyết định tất cả mọi thứ, và chúng tôi sẽ thích nó – onmyway133

5

Theo tôi được biết, NSLog không phải là một hàm mục tiêu C mà là một hàm C được xây dựng trong nền tảng của Cocoa. Do đó nó phù hợp với các hàm C cơ bản với các đối số variadic.

4

NSLog có thể dường như như một lớp học, nhưng không phải.

NSLog là chức năng FoundationKit để in các câu lệnh gỡ lỗi cho bảng điều khiển . Nó được định nghĩa trong NSObjCRuntime.h:

void NSLog(NSString format, ...); 

Có một số lượng tốt của thông tin ở đây: http://cocoadev.com/wiki/NSLog

EDIT: Như @fyngyrz chỉ ra, trang đã chết. Vì vậy, here is a wayback-machine version of the page from 2012

+1

Không, không có. Trang đã biến mất. – fyngyrz

+0

@fyngyrz Thanx. Đã chỉnh sửa câu trả lời. – Alladinian