NSLog 這個函式是在撰寫 iOS 程式時候的小幫手,它可以幫確認數值、物件以及設定的方法是否有正確被呼叫等等。使用上通常會在 NSLog 函式中加入需要的 NSString 的字串,好在除錯時提供辨識。下面提供幾個常用的 NSLog 參數,並嘗試將其寫成巨集 Macro,方便日後在 Debug 時使用。
//得到目前執行的Class與函式名稱(包含類別方法和實體方法)
NSLog(@"%s", __func__);
//也可以猜開撰寫
NSLog(@"%@", NSStringFromClass([self class]));
NSLog(@"%@", NSStringFromSelector(_cmd));
//獲得行數
NSLog(@"%d", __LINE__);
//物件記憶體釋放情形
NSObject *furnace = [[NSObject alloc] autorelease];
NSLog(@"Retain Count = %d",[furnace retainCount]);
[furnace retain];
NSLog(@"Retain Count = %d",[furnace retainCount]);
[furnace release];
NSLog(@"Retain Count = %d",[furnace retainCount]);
如果每次都要這樣打一大串的程式碼,也可以考慮使用巨集 Macro 的方式,撰寫的方法其實就是在程式碼最一開頭使用 #define 定義式( Preprocessor 前端處理程式)。
#ifdef DEBUG
# define SHOW_CLASS_METHOD NSLog(@"%s", __func__)
# define SHOW_CLASS NSLog(@"%@", NSStringFromClass([self class]))
# define SHOW_METHOD NSLog(@"%@", NSStringFromSelector(_cmd))
# define SHOW_LINE NSLog(@"%d", __LINE__)
# define SHOW_RETAIN_COUNT(object) NSLog(@"%d", [object retainCount])
#else
# define SHOW_CLASS_METHOD
# define SHOW_CLASS
# define SHOW_METHOD
# define SHOW_LINE NSLog(@"%d", __LINE__)
# define SHOW_RETAIN_COUNT(object)
#endif
巨集中的 #ifdef、DEBUG、#else 與 #endif,目的只是為了讓 Xcode 在 Debug 模式執行下才會引入這些巨集的實做方法,如果不是在 Debug 模式下(例如 Release 模式),就不會引入其實做方法,即使呼叫這些巨集也不會有任何事情發生。有了巨集之後在使用上也變的非常方便,程式碼如下。
//得到目前執行的Class與函式名稱(包含類別方法和實體方法)
SHOW_CLASS_METHOD;
//也可以猜開撰寫
SHOW_CLASS;
SHOW_METHOD;
//獲得行數
SHOW_LINE;
//物件記憶體釋放情形
NSObject *furnace = [[NSObject alloc] autorelease];
SHOW_RETAIN_COUNT(furnace);
[furnace retain];
SHOW_RETAIN_COUNT(furnace);
[furnace release];
SHOW_RETAIN_COUNT(furnace);
最後,NSLog 函式能使用的參數當然不只這一點點,如果各位讀者有其他特殊需求也可以參閱 Objective-C 或是 C 的技術文件,並製作自己方便使用的巨集。
沒有留言:
張貼留言