I have noticed a pattern in my Cocoa code, which I have been able to simplify. I often print out the value of a variable for debugging. 99 times out of 100, the code looks like this: NSLog(@"actionURL = %@", actionURL);
, where actionURL
is some variable.
But using the macros, I can say LOG_ID(actionURL);
. This is shorter, and non-repetitive.
The macros I use to simplify debugging (2008-09-16):
#define FourCharCode2NSString(err) NSFileTypeForHFSTypeCode(err)
#define LOG_4CC(x) NSLog(@"%s = %@", # x, FourCharCode2NSString(x))
#define LOG_FUNCTION() NSLog(@"%s", __FUNCTION__)
#define LOG_ID(o) NSLog(@"%s = %@", # o, o)
#define LOG_INT(i) NSLog(@"%s = %d", # i, i)
#define LOG_INT64(ll) NSLog(@"%s = %lld", # ll, ll)
#define LOG_FLOAT(f) NSLog(@"%s = %f", # f, f)
#define LOG_LONG_FLOAT(f) NSLog(@"%s = %Lf", # f, f)
#define LOG_OBJECT(o) LOG_ID(o)
#define LOG_POINT(p) NSLog(@"%s = %@", # p, NSStringFromPoint(p))
#define LOG_RECT(r) NSLog(@"%s = %@", # r, NSStringFromRect(r))
#define LOG_SIZE(s) NSLog(@"%s = %@", # s, NSStringFromSize(s))
Look in assert.h
for insight on how to roll your own debugging macros.
Thanks. This code if very helpful. I added:
#define LOG_BOOL(b) NSLog(@"%s = %@", # b, b ? @"YES" : @"NO")
Comment by Adam Gerson — February 12, 2011 @ 11:28 am
This approach to logging has been superseded by: http://vgable.com/blog/2010/08/19/the-most-useful-objective-c-code-ive-ever-written/ . I think you’ll like it a lot more.
Comment by Vincent Gable — February 14, 2011 @ 1:55 am