__FILE__私が知っている最良の代替手段はマクロです。定義済みの C マクロなどで使用できます__PRETTY_FUNCTION__。
プロトタイプ
#define MyLog(args...) MyLogImpl(__FILE__,__PRETTY_FUNCTION__,args);
void MyLogImpl(const char *filename, const char *funcPrettyName, NSString *formatStr, ...);
実装
でva_start() va_end()、フォーマットを取得できます。フォーマット サポートの不足を補うprintfために、この値を次のように使用します。
NSString *messageStr = [[NSString alloc] initWithFormat:formatStr arguments:replacingArgumentParameters];
そして、次のような他のデータと一緒に標準メッセージを印刷できます
fprintf(stderr, "%s %s", filename, messageStr);
メッセージ自体だけでなく、MYLog を呼び出していたファイル名も表示されます。
もう 1 つの便利な方法は、メッセージを現在の log_level または実行中の構成に制限することです。
十分な経験を積んでいると思われる場合は、標準の NSLog マクロを再定義することもできます。