Objective-C 宏定义的收集

本文翻译自:Collection of Objective-C Macros

下面你将看到一些关于Objective-C 宏定义的收集,你也可以把你收集的回复给我(谢谢你!)

// 度数 转为 弧度
#define degreesToRadians(x) (M_PI * x / 180.0)

// 使定时器失效
#define UA_invalidateTimer(t) [t invalidate]; t = nil;

// 设备信息
#define UA_isIPad   (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define UA_isIPhone (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define UA_isRetinaDevice ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] >= 2)
#define UA_isMultiTaskingSupported ([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)] && [[UIDevice currentDevice] isMultitaskingSupported])


// 线程
#define UA_runOnMainThread if (![NSThread isMainThread]) { dispatch_sync(dispatch_get_main_queue(), ^{ [self performSelector:_cmd]; }); return; };

// 颜色
#define UA_rgba(r,g,b,a) [UIColor colorWithRed:r/255.0f green:g/255.0f blue:b/255.0f alpha:a]
#define UA_rgb(r,g,b) UA_rgba(r, g, b, 1.0f)

// 调试和日志
#ifdef DEBUG<
  #define UA_log( s, ... ) NSLog( @"&lt;%@:%d&gt; %@", [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__,  [NSString stringWithFormat:(s), ##__VA_ARGS__] )
#else
  #define UA_log( s, ... )
#endif

#define UA_logBounds(view) UA_log(@"%@ bounds: %@", view, NSStringFromRect([view bounds]))
#define UA_logFrame(view)  UA_log(@"%@ frame: %@", view, NSStringFromRect([view frame]))

// 其它的
#define NSStringFromBool(b) (b ? @"YES" : @"NO")
#define UA_SHOW_VIEW_BORDERS YES
#define UA_showDebugBorderForViewColor(view, color) if (UA_SHOW_VIEW_BORDERS) { view.layer.borderColor = color.CGColor; view.layer.borderWidth = 1.0; }
#define UA_showDebugBorderForView(view) UA_showDebugBorderForViewColor(view, [UIColor colorWithWhite:0.0 alpha:0.25])
最近的文章

Radare - 逆向工程框架

本文翻译自:Radare – The Reverse Engineering FrameworkRadare开始作为一个简单的命令行界面的十六进制编辑器,支持64位偏移量以从磁盘中搜索和恢复数据。它已演变成由一个以十六进制编辑器为中心所组成的项目,包括组装/分解器,代码分析,脚本功能,分析和图形化代码与数据,并容易与unix集成。从本质上讲,它已经成为一个逆向工程框架,插件等等。radare2本身就是这个十六进制编辑器和调试器的核心。允许从不同的IO访问,如磁盘,网络,内核插件,远程设...…

逆向工程继续阅读
更早的文章

设计模式:适配器模式

本文翻译自:Design Patterns: The Adapter Pattern在上一篇文章中,我们介绍了外观模式如何只用一个简单的外观类来简化任何庞大而复杂的系统工作。在这篇文章中,我们将继续讨论设计模式—适配器模式。 当你的代码依赖于一些外部的API或者其它的代码改变很频繁时,可以使用这个特定的模式来解决问题。这种模式属于“结构模式”的范畴,因为它教导我们的代码和类如何构造来更容易地管理和扩展。再次重申,设计模式对于传统的类并没有什么新东西,相反,它展示给我们一种更好地构造我们...…

设计模式继续阅读