以光速进行调试和日志记录。请不要再在调试器中编写类型转换。只需在调试器中简单地写入[DLog CGRectGet:myRect]
,或在代码中写入DLogCGRect(myRect)
,所有内容都将自动完成!
DLog只是C函数或objc方法执行的类方法集合。在调试会话中,快速编写po (NSString*)NSStringFromCGRect(myRect)
很快就会变得令人烦琐。DLog通过类方法集合解决了这个问题。我发现自己在项目早期阶段会经常使用这个文件。只需编写几个键,例如'D' TAB 'O' TAB,'DLogObject'就会自动完成,真是令人愉快。
#import <DLog/DLog.h>
提示:将其导入Prefix.pch中,以包括整个项目。
DLogObject(myObject);
DLogNSObject(myObject); // => DL:myObject;hello, world!;
DLogFunctionLine(); // => DL:-[TableViewController viewDidLoad]:15
DLogBOOL(myValue); // => DL:myValue;YES;
DLogSEL(mySelector); // => DL:mySelector;buttonAction:;
DLogCGFloat(myCGFloat);
DLogunichar(myUnichar);
DLogUIColor(myColor);
DLogMainThread() // => DL:-[TableViewController viewDidLoad];15:MainThread=YES;
DLogTimeStart(1);
DLogTimeEnd(1); // => DL:1;4123;
...
po [DLog Selector:mySelector] // => viewDidAppear:
po [DLog CGRect:myRect] // => {0, 0, 320, 80}
po [DLog UIGestureRecognizerState:myState] // => UIGestureRecognizerStateBegan
po [DLog cTypeEncoding:myObject] // => id
po [DLog cTypeEncoding:myInt] // => int
po [DLog cTypeEncoding:&myInt] // => int*
po [DLog cTypeEncoding:myCGFloat] // => (32bit) float, (64bit) double
...
把UIImage从调试器保存到文件中
po [DLog base64EncodedStringWithUIImage:myImage];
提示:将字符串复制粘贴到在线base64图片解码器中。
递归打印UIView层次结构
po [DLog UIView:myView];
打印大多数UIKit值
po [DLog UIOffset:myOffset];
po [DLog UIEdgeInsets:myInsets];
DLog为您提供快速访问静态类型系统和objc运行时。
DLogBytes(myPointer);
DLogByteOrder(); // => LittleEndian
DLogTypeEncoding(myValue); // => unsigned long long
// print exception reason
DLogException(myException);
// print stack trace
DLogException([[NSException new] raise]);
你看到了什么模式?DLog允许以多种方式做事,没有正确的方式,只有最快的方式。
DLogfloat(myFloat);
DLogid(myObject);
DLogObject(myObject);
DLogNSObject(myObject);
DLogNSInteger(myNSInteger);
DLogNSUInteger(myNSUInteger);
DLoglong(myLong);
DLogunsignedlong(myUnsignedLong);
DLoglonglong(myLongLong);
...
还包含了方便的方法,即使它们可以快速手动编写,因为设置#define DEBUG 0
和一次移除所有日志语句要容易得多。断言方法以DAssert
开头。
DAssertMainThread();
DAssertNil();
DAssertNonNil();
DLogUIView
和[DLog performLowMemoryWarning]
在运行时调用私有方法。没有编译器错误,因为选择器是动态评估的,并且函数是手动查找的(参见源代码)。由于这个原因,不建议将DLog包含在任何App Store的公共版本中。
DLog不打算用于生产,它会自动删除,并在发布时用do{}while(0)
语句替换,这些语句会得到优化。如果您希望在生产中使用DLog,请简单地设置#define DLOG 1
。
#define DEBUG 0
#define DLOG 1
DLogObject(myDate); // => NSLog(@"%s:%s:%@", 'DL', 'myDate', myDate);
DLog日志方法包括一个前缀(默认为'DL'),但可以配置。
#define DLOG_PREFIX MYPREFIX
如果您想要贡献力量,请按照以下步骤提交 pull 请求。
关注 Gaurav Khanna 在 Twitter (@gauravk92)
DLog 在 MIT 许可协议下提供。更多信息请参阅 LICENSE 文件。