usefully macro in iOS #wating your code!
#ifdef DEBUG
#define DLog(...) NSLog(__VA_ARGS__)
#define DFLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
#else
#define DLog(...)
#define DFLog(...)
#endif
// Debug log
#define NEED_OUTPUT_LOG 1
#if NEED_OUTPUT_LOG
#define DLogRect(rect) \
DFLog(@"%s x=%f, y=%f, w=%f, h=%f", #rect, rect.origin.x, rect.origin.y, \
rect.size.width, rect.size.height)
#define DLogPoint(pt) \
DFLog(@"%s x=%f, y=%f", #pt, pt.x, pt.y)
#define DLogSize(size) \
DFLog(@"%s w=%f, h=%f", #size, size.width, size.height)
#define DLogColor(_COLOR) \
DFLog(@"%s h=%f, s=%f, v=%f", #_COLOR, _COLOR.hue, _COLOR.saturation, _COLOR.value)
#define DLogSuperViews(_VIEW) \
{ for (UIView* view = _VIEW; view; view = view.superview) { DFLog(@"%@", view); } }
#define DLogSubViews(_VIEW) \
{ for (UIView* view in [_VIEW subviews]) { DFLog(@"%@", view); } }
#else
#define DLogRect(rect) ((void)0)
#define DLogPoint(pt) ((void)0)
#define DLogSize(size) ((void)0)
#define DLogColor(_COLOR) ((void)0)
#define DLogSuperViews(_VIEW) ((void)0)
#define DLogSubViews(_VIEW) ((void)0)
#endif
// Singleton
#define SINGLETON_GCD(classname) \
\
+ (classname *)shared##classname { \
\
static dispatch_once_t pred; \
__strong static classname * shared##classname = nil;\
dispatch_once( &pred, ^{ \
shared##classname = [[self alloc] init]; }); \
return shared##classname; \
}
// GCD
#define dispatch_main_sync_safe(block)\
if ([NSThread isMainThread]) {\
block();\
} else {\
dispatch_sync(dispatch_get_main_queue(), block);\
}
#define dispatch_main_async_safe(block)\
if ([NSThread isMainThread]) {\
block();\
} else {\
dispatch_async(dispatch_get_main_queue(), block);\
}
// PATH
#define PATH_OF_APP_HOME NSHomeDirectory()
#define PATH_OF_TEMP NSTemporaryDirectory()
#define PATH_OF_DOCUMENT [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]
#define PATH_OF_CACHE [NSSearchPathForDirectoriesInDomains (NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0]
// COLOR AND FRAME
#define RGBCOLOR(r,g,b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1]
#define RGBACOLOR(r,g,b,a) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:(a)]
#define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width
#define SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height
// NSUserDefault
#define defaults() [NSUserDefaults standardUserDefaults]
#define defaults_init(dictionary) [defaults() registerDefaults:dictionary]
#define defaults_save() [defaults() synchronize]
#define defaults_object(key) [defaults() objectForKey:key]
#define defaults_bool(key) [defaults_object(key) boolValue]
#define defaults_set_bool(key, object) [defaults() setBool:object forKey:key]; defaults_save();
#define defaults_set_object(key, object) [defaults() setObject:object forKey:key]; defaults_save(); defaults_post_notification(key)
#define defaults_remove(key) [defaults() removeObjectForKey:key];defaults_save();
#define defaults_object_from_notification(n) [n.userInfo objectForKey:@"value"]
#define defaults_observe_object(key, block) [[NSNotificationCenter defaultCenter] addObserverForName:key object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *n){ block( defaults_object_from_notification(n) ); }]
#define defaults_post_notification(defaults_key) [[NSNotificationCenter defaultCenter] postNotificationName:defaults_key object:nil userInfo:@{ @"value" : defaults_object(defaults_key) }];
#define NOTIFICATION_CENTER [NSNotificationCenter defaultCenter]
// Reference
#define kAppDelegate (MSAppDelegate *)[UIApplication sharedApplication].delegate
#define IS_INSTANCE_OF(instance, className) ((instance) && [instance isKindOfClass:[className class]])
#define WEAKSELF typeof(self) __weak weakSelf = self;
// System version
#define SYSTEM_VERSION_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)
#define SYSTEM_VERSION_GREATER_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)