24/7 twenty-four seven

iOS/OS X application programing topics.

iPhoneデバッグ用のマクロで、クラス名とメソッド名を自動的にログ出力する

iPhone デバッグ用のマクロ - Windchase

#ifdef DEBUG
#  define LOG(...) NSLog(__VA_ARGS__)
#  define LOG_CURRENT_METHOD NSLog(NSStringFromSelector(_cmd))
#else
#  define LOG(...) ;
#  define LOG_CURRENT_METHOD ;
#endif
iPhone デバッグ用のマクロ - Windchase


このマクロをちょっと変えて、クラス名を自動的に出力するようにしました。

#ifdef DEBUG
#  define LOG(...) NSLog(__VA_ARGS__)
#  define LOG_CURRENT_METHOD NSLog(@"%@/%@", NSStringFromClass([self class]), NSStringFromSelector(_cmd))
#else
#  define LOG(...) ;
#  define LOG_CURRENT_METHOD ;
#endif

こんな風に出ます。

[Session started at 2008-12-11 03:09:19 +0900.]
2008-12-11 03:09:22.849 LDRTouch[1014:20b] LDRTouchAppDelegate/applicationDidFinishLaunching:
2008-12-11 03:09:22.851 LDRTouch[1014:20b] LDRTouchAppDelegate/loadUserSettings
2008-12-11 03:09:22.894 LDRTouch[1014:20b] unread items count: 1085
2008-12-11 03:09:22.936 LDRTouch[1014:20b] LDRTouchAppDelegate/reachabilityChanged:
2008-12-11 03:09:22.936 LDRTouch[1014:20b] LDRTouchAppDelegate/executeUnfinishedOperations
2008-12-11 03:09:22.939 LDRTouch[1014:20b] RootViewController/reachabilityChanged:
2008-12-11 03:09:24.756 LDRTouch[1014:20b] LDRTouchAppDelegate/saveUserSettings
2008-12-11 03:09:26.747 LDRTouch[1014:20b] FeedViewController/dealloc
2008-12-11 03:09:26.749 LDRTouch[1014:20b] FeedView/dealloc
2008-12-11 03:09:26.749 LDRTouch[1014:20b] FeedCell/dealloc
2008-12-11 03:09:26.751 LDRTouch[1014:20b] FeedCell/dealloc
2008-12-11 03:09:26.751 LDRTouch[1014:20b] FeedCell/dealloc

UITableViewを使ってデータを表示するアプリケーションの場合、データを更新したときや、画面を移動したときに、消えたオブジェクトがちゃんと解放されているか気になるので、deallocが呼ばれたことが分かるようにしています。

でも、どのクラスのメソッドが呼ばれているか分からないので、クラス名をつけて、区別します。