使用NSLog記錄日志是很方便的操作,但是有時候也希望能夠像C/C++編程一樣使用一些預定義的宏,比如獲取當前文件名、行號等,在XCode中其實也有這樣的功能。
XCode的c預處理器提供了一些標准宏,另外Objective-C語言還提供了隱含的_cmd參數,可以用來獲取當前方法的selector,以及將selector與class轉換為字符串的函數。
可以在NSLog中使用這些宏及函數來增強日志功能。
能夠在C/C++/Objective-C中使用的預處理宏有:
宏 | 格式 | 描述 |
__func__
%s
當前函數名
__LINE__
%d
當前行號
__FILE__
%s
當前文件名,包含完整的路徑信息
__PRETTY_FUNCTION__
%s
與__func__類似,但是函數名中包含了c++類型信息
能夠在Objective-C中使用的表達式/函數有:
函數 | 格式 | 描述 |
NSStringFromSelector(_cmd)
%@
返回當前selector名
NSStringFromClass([self class])
%@
返回當前對象的類名
[[NSString stringWithUTF8String:__FILE__] lastPathComponent]
%@
返回當前文件名,不含路徑信息
[NSThread callStackSymbols]
%@
返回當前調用棧信息
注意:Log盡量不要讓最終用戶可以看到,防止敏感信息洩露。