iOS项目之NSLog相关
这算是在项目中最常用的命令了,方便程序员查看日志数据,便于程序调试。在开发中我们经常会进行一些设置,下面就来简单的说一说:
先来看看普通的NSLog:
- (void)viewDidLoad {
[super viewDidLoad];
// 准备的数据
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"TestNSLogData" ofType:@"plist"];
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithContentsOfFile:filePath];
NSLog(@"%@", dict);
}
输出的结果为:
-- ::24.270 DictionaryTest[:] {
Person = {
age = ;
name = "\U5f20\U4e09";
};
}
于是发现了一些令人不愉快的问题,下面就一个一个来解决吧。
首先解决日期输出。有些时候我们需要一个干净的日志输出,可NSLog里自带了一些东西,于是就得想办法取消那些麻烦的输出,只取我们需要的东西,所以在这里我们就使用了C语言了输出方法了(printf / fprintf):
printf("%s", [[NSString stringWithFormat:@"%@", dict] UTF8String]);
输出结果为:
{
Person = {
age = ;
name = "\U5f20\U4e09";
};
}
现在输出的结果就非常干净了,而且还可以自己自定义,让它满足自己的风格,然后封装成宏定义,自己看着舒服就OK。下面是我的宏定义:
#define NSLog(FORMAT, ...) fprintf(stderr, "\n\n******(class)%s(begin)******\n(SEL)%s\n(line)%zd\n(data)%s\n******(class)%s(end)******\n\n", [[[NSString stringWithUTF8String: __FILE__] lastPathComponent] UTF8String], __FUNCTION__, __LINE__, [[NSString stringWithFormat: FORMAT, ## __VA_ARGS__] UTF8String], [[[NSString stringWithUTF8String: __FILE__] lastPathComponent] UTF8String]);
输出结果为:在这里显示了类名,方法名,命令所在行数,数据
******(class)ViewController.m(begin)******
(SEL)-[ViewController viewDidLoad]
(line)
(data){
Person = {
age = ;
name = "\U5f20\U4e09";
};
}
******(class)ViewController.m(end)******
然后再解决中文显示的问题。在日志输出中,中文输出总显示unicode编码格式,不便于程序员阅读。于是添加了两行代码:
- (void)viewDidLoad {
[super viewDidLoad];
// 准备的数据
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"TestNSLogData" ofType:@"plist"];
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithContentsOfFile:filePath];
// 数据格式转换
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:nil];
NSString *jsonStr = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"%@", jsonStr);
}
输出的结果为:
******(class)ViewController.m(begin)******
(SEL)-[ViewController viewDidLoad]
(line)
(data){
"Person" : {
"age" : ,
"name" : "张三"
}
}
******(class)ViewController.m(end)******
这样就能正确显示中文了。但考虑到以后经常会使用到这两行代码,于是写了一个NSObject的分类,将这个代码封装成一个方法,便于以后的使用。
// .h 文件 #import <Foundation/Foundation.h> @interface NSObject (Extension) - (NSString *)sjx_jsonString; @end /*---------- 华丽的分隔线 ----------*/ // .m 文件 #import "NSObject+Extension.h" @implementation NSObject (Extension) - (NSString *)sjx_jsonString
{
if (!self) return nil;
// 数据格式转换
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:self options:NSJSONWritingPrettyPrinted error:nil];
return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
} @end
这样输出时就这样写:
NSLog(@"%@", [dict sjx_jsonString]);
结果和上面一样。
如果项目中使用到了MJExtension框架,这个分类其实也可以不必添加的,输出的时候这样写:
NSLog(@"%@", [dict mj_JSONString]);
输出的结果为:
******(class)ViewController.m(begin)******
(SEL)-[ViewController viewDidLoad]
(line)
(data){"Person":{"age":,"name":"张三"}}
******(class)ViewController.m(end)******
只不过数据结构就不是那么好看,不过现在网上JSON在线编辑器也蛮多的,转换一下就OK了。
最后考虑到性能问题。在项目上线发布的时候,项目里是不需要NSLog输出的,所以需要设置一下DEBUG 和 RELEASE。
方法一:


方法二:使用项目中 xxxxxx.pch文件中添加宏定义,这也是项目中流行的做法:
#ifdef DEBUG #define NSLog(FORMAT, ...) fprintf(stderr, "\n\n******(class)%s(begin)******\n(SEL)%s\n(line)%zd\n(data)%s\n******(class)%s(end)******\n\n", [[[NSString stringWithUTF8String: __FILE__] lastPathComponent] UTF8String], __FUNCTION__, __LINE__, [[NSString stringWithFormat: FORMAT, ## __VA_ARGS__] UTF8String], [[[NSString stringWithUTF8String: __FILE__] lastPathComponent] UTF8String]); #else #define NSLog(FORMAT, ...) nil #endif
这样就完美了。
iOS项目之NSLog相关的更多相关文章
- [转载]IOS项目打包除去NSLog和NSAssert处理之阿堂教程
原文链接地址:http://blog.sina.com.cn/s/blog_81136c2d0102v1ck.html 原文地址:IOS项目打包除去NSLog和NSAssert处理之阿堂教程作者:时空 ...
- 开源 iOS 项目分类索引大全 - 待整理
开源 iOS 项目分类索引大全 GitHub 上大概600个开源 iOS 项目的分类和介绍,对于你挑选和使用开源项目应该有帮助 系统基础库 Category/Util sstoolkit 一套Cate ...
- IOS 项目问题总结
把自己项目中遇到的问题总结一下,供大家参考,希望大家多多提出意见!! 在Xcode 6.2中遇到Your build settings specify a provisioning profile w ...
- 开源 iOS 项目分类索引大全
GitHub 上大概600个开源 iOS 项目的分类和介绍,对于你挑选和使用开源项目应该有帮助 系统基础库 Category/Util sstoolkit 一套Category类型的库,附带很多自定义 ...
- iOS如何限制使用SDK的版本? 解决iOS项目的版本兼容问题
更新 2015-11-16 感谢微博好友@zyyy_000的评论,补充了为什么要在+ (void)load方法里面做Method Swizzling. 前言 最近,在做项目时,因为某种原因,突然要 ...
- ios项目里扒出来的json文件
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #000000 } p.p2 { margin: 0.0px 0. ...
- iOS项目中常用的第三方开源库
1.项目使用的第三方开源库 项目使用了CocoaPods(类似java中的maven)管理常用的第三方库,一些特殊的单独引用,下面介绍下比较好用的几个. (1)AFNetworking 目前比较推荐的 ...
- ios学习总结(1) -- 创建第一个ios项目
原文地址 下载并打开xcode. 接着新建一个工程,如下图所示: 点击Create a new Xcode project,之后选择ios下的Application,点击Single View App ...
- iOS项目的目录结构和开发流程
转自无网不剩的博客 网上相关的资源不多,开源的且质量还不错的iOS项目也是少之又少,最近正好跟同事合作了一个iOS项目,来说说自己的一些想法. 目录结构 AppDelegate Models Ma ...
随机推荐
- Nginx模块开发与架构解析(nginx安装、配置说明)
第一章 研究nginx前的准备工作 Linux操作系统需要2.6及其以上的内核(支持epoll) 使用nginx的必备软件 Linux内核参数优化方案 安装nginx 控制nginx 第二章 ngin ...
- jquery面试(2)
DOM操作——怎样添加.移除.移动.复制.创建和查找节点? (1)创建新节点 createDocumentFragment() //创建一个DOM片段 createElement() //创建一个具体 ...
- 一次CTF后对二维码的认识
前一段时间参加一个CTF比赛的时候其中有一个题目就是一张二维码图片,然后获取其中的信息来解题,那个二维码的特别之处在于,它把3个位置探测区域用几张美女图片代替了,然后在做题的时候顺便简单的了解了一下二 ...
- PHP计算显示平均温度、五个最低及最高温度
<?php $month_temp = "78, 60, 62, 68, 71, 68, 73, 85, 66, 64, 76, 63, 81, 76, 73, 68, 72, 73, ...
- plsql中文乱码
一.关于PLSQL无法正确显示中文 刚才下载安装了PLSQL Developer 9.0.0.1601 汉化绿色版,执行SQL查询语句,发现显示的数据中只要有中文都会以?表示. 原因:客户端跟服务器的 ...
- thinkphp5中使用PHPExcel(转载)
thinkphp5中可以使用composer来获取第三方类库,使用起来特别方便,例如:可是使用composer下载PHPMailer,think-captcha(验证码)等等…… 接下来说一下怎么使用 ...
- Wooden Sticks---(贪心)
Problem Description There is a pile of n wooden sticks. The length and weight of each stick are know ...
- 再读vue2.0
玩过一段时间后在来读读vue2.0会发现受益良多 概述: vue2.0 是一套构建用户界面的渐进式框架, 使用virtual DOM 提供了响应式和组件化, 允许使用简介的模板语法来声明式的将数据渲 ...
- Eclipse 02: 安装spring tool suite插件
在实际项目开发时,如果我们创建了一个spring文件,其实也就是个xml文件,如果没有集成spring的开发工具,创建的就是一个单纯的xml文件.安装spring插件以后创建spring配置文件会方便 ...
- Cesium 实践
详细内容请参考教程:https://www.jianshu.com/p/31c3b55a21eb 该教程翻译自官方英文教程,对入门cesium 帮助很大. 2,Cesium项目实例 实践: 问题 ...