A:重写- (NSString *)description函数
如果有一个Product 产品对象
Product.h中
1 #import <Foundation/Foundation.h>
2
3 typedef enum : NSUInteger { 4 RED = 1, 5 GREEN, 6 } ProductColor; 7 8 @interface Product : NSObject 9 10 @property (nonatomic, assign) ProductColor color; 11 @property (nonatomic, assign) float weight; 12 13 @end
Product.m中
#import "Product.h"
@implementation Product //重写description方法 -(NSString *)description { return [NSString stringWithFormat:@"%@, %@",@(_color), @(_weight)]; } @end
结果比较
Product *product = [[Product alloc] init];
product.color = 1;
product.weight = 120;
// 重写description打印输出对象的属性值 NSLog(@"重写description打印输出%@",product); // 2015-11-07 13:27:25.956 WriteLeanPrograms[650:138469] 重写description打印输出1, 120 // 不重写description打印输出对象的指针 NSLog(@"不重写description打印输出%@",product); //2015-11-07 13:28:20.035 WriteLeanPrograms[654:138882] 不重写description打印输出<Product: 0x13f529ff0>
其实就是一句话:重写description输出对象的属性值 不重写decription方法输出的时对象的指针地址
B:自定义LOG
在程序调试
任 何由NSLog输出的内容都会成为成品代码的一部分,也就是说会被任何接触到应用的人看到。只要把设备接入信息管理工具,每个人都能查看控制台信息并查 询每一条日志记录。没错,这必然会引发一系列严重后果。试想一下,如果我们曾经向控制台输出过机密逻辑算法或者者用户密码,这些信息一旦被他人获得将带来 恶劣影响。有鉴于此,苹果公司会在App Store的审核流程中检测控制台信息。一旦发现其中包含太多输出结果,应用程序将被直接打回开发者处进行调整 ,使用自定义的LOG在发布的时候自动取消打印,只在调试的时候打印信息,还可以看出打印结果属于哪一个文件的哪一个函数,哪一行是不是很方便发布app版本的时候就不会打印了,提高了性能 发布的时候不需要去设置debug =0,xcode 使用发布证书打包时自动设置debug = 0,
这段代码
#define NSLog(format, ...) do { \
fprintf(stderr, "<%s : %d> %s\n", \ [[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], \ __LINE__, __func__); \ (NSLog)((format), ##__VA_ARGS__); \ fprintf(stderr, "-------\n"); \ } while (0)
:
NSLog的高级解决方案
虽然NSLog表现卓越,但其局限性也不可忽视:它只能向本地输出结果;
- 我们无法为其添加日志“等级”(例如严重、警告等等);
- NSLog速度很慢。在进行大量处理时它会严重拖慢应用程序的运行效果。
对于想给自己来点挑战的开发者来说,还有两款框架能够回避NSLog的短板——但前辈是大家得有足够的时间和精力投入其中。下面来看这两款个人推荐:
- –一款专为Cocoa打造的知名通用型日志框架,学习起来略困难但功能非常强大。
- SNLog –NSLog的替换方案之一。
C:使用第三方插件快速打印对象
使用第三方插件快速打印也是很不错的方案
不用重写Drscription,直接打印对象,打印frame size 等等,觉得是一个不错的调试打印工具
https://github.com/DeveloperLx/LxDBAnything