printf和NSlog區別
NSLog會自動加上換行符,不需要自己添加換行符,NSLog會加上時間和進程信息,而printf僅將輸入的內容輸出不會添加任何額外的東西。兩者的輸入類型也是有區別的NSLog期待NSString*,而printf期待const char *。最本質的區別在于NSLog輸出的日志,在debug下面,NSLog的輸出會被寫到system.log,而printf是不具備日志屬性的。
NSLog的定義
NSLog定義在NSObjCRuntime.h中,如下所示:
void NSLog(NSString *format, …);
基本上,NSLog很像printf,同樣會在console中輸出顯示結果。不同的是,傳遞進去的格式化字符是NSString的對象,而不是char *這種字符串指針。
NSLog (@"this is a test");
NSLog (@"string is :%@", string);
NSLog (@"x=%d, y=%d", 10, 20);
但是下面的寫法是不行的:
int i = 12345;
NSLog( @"%@", i );
原因是, %@需要顯示對象,而int i明顯不是一個對象,要想正確顯示,要寫成:
int i = 12345;
NSLog( @"%d", i );
%@ 對象
%d, %i 整數%u 無符整形%f 浮點/雙字%x, %X 二進制整數%o 八進制整數%zu size_t%p 指針%e 浮點/雙字 (科學計算)%g 浮點/雙字 %s C 字符串%.*s Pascal字符串%c 字符%C unichar%lld 64位長整數(long long)%llu 無符64位長整數%Lf 64位雙字
聲明以常見的先行短線和位于圓括號中的返回類型開頭:
-(void)
參數類型在圓括號中指定,:號是方法名稱最重要的組成部分。
如果方法使用參數就需要冒號,否則不需。
就Objective-C語言而言,創建一個類非常簡單。它非常典型的分成了兩個部分。
類的接口通常保存在ClassName.h文件里,它定義了實例的參數,以及一些公開的方法。
類的實現在ClassName.m文件里。它包含了真正運行的代碼和那些方法。它還經常定義一些私有的方法。這些私有的方法對于子類是不可見的。
這里有一個接口文件的大概。類名Photo,所以文件名叫Photo.h:
#div_code img { border: 0px none; }
#import
@interface Photo : NSObject {
NSString* caption;
NSString* photographer;
}
@end
?
首先,我們把Cocoa.h import進來。Cocoa的應用程序的所有的基本的類大多都是這樣做的。#import宏指令會自動的避免把同一個文件包含多次。
@interface符號表明這是Photo類的聲明。冒號指定了父類。上面這個例子父類就是NSObject。
在大括弧里面,有兩個變量:caption和photographer。兩個都是NSString類型的。當然了,他們也可以是任何別的類型包括id類型的。
最后@end結束整個聲明。