iOS开发之使用代码定位性更高的Log

郝萌主倾心贡献,尊重作者的劳动成果,请勿转载。

如果文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额随意,重在心意^_^

我要捐赠: 点击捐赠

Cocos2d-X源码下载:点我传送

游戏官方下载:http://dwz.cn/RwTjl

游戏视频预览:http://dwz.cn/RzHHd

游戏开发博客:http://dwz.cn/RzJzI

游戏源码传送:http://dwz.cn/Nret1

关于Log,打印当前函数无非就是_cmd, __func__, __FUNCTION__, __PRETTY_FUNCTION__,在Xcode中_cmd会返回一个SEL对象,

而剩下的都是来自C/C++编译器的定义所以都会返回一个C的字符串,显示结果也都差不多,可能不同编译器会有小小的差别。

显然后面__func__系列要比_cmd好用,相对Objective-C类型内的方法调用,

他不仅会显示方法名,还会显示类型,配合__LINE__,可以精确定位出Log在代码中的位置。

比如这样:

@implementation MyClass

+ (void)doo
{
    //__func__, __FUNCTION__, __PRETTY_FUNCTION__都差不多
    NSLog(@"Method: %s, Line: %d.", __func__, __LINE__);
}

@end

会输出:

Method: +[MyClass doo], Line: 16.

我们还可以定义一些宏来快速在NSLog或者其他Log框架中来使用,比如这样:

#define FUNCINF [NSString stringWithFormat:@"M:%s, L:%d.", __func__, __LINE__]
#define PFUNCINF(x) @"%@|%@", FUNCINF, x
#define PPFUNCINF(x1, x2) @"%@|%@|%@", FUNCINF, x1, x2
#define PPPFUNCINF(x1, x2, x3) @"%@|%@|%@|%@", FUNCINF, x1, x2, x3

举例,假设在AppDelegate的applicationDidFinishLaunching方法中调用如下代码:

分别使用NSLog和Cocoa Lumberjack Log框架的DDLogError(参数和NSLog一样):

NSLog(PFUNCINF(@"开始操作"));
NSLog(PPFUNCINF(@"操作1", @123));
NSLog(PPPFUNCINF(@"操作2", @"子操作1", @"结果1"));
//直接用在Cocoa Lumberjack的Log中
DDLogError(PPFUNCINF(@"操作3", @"错误1"));

输出Log(M代表方法名称,L代表行数):

M:-[AppDelegate applicationDidFinishLaunching:], L:60.|开始操作
M:-[AppDelegate applicationDidFinishLaunching:], L:61.|操作1|123
M:-[AppDelegate applicationDidFinishLaunching:], L:62.|操作2|子操作1|结果1
M:-[AppDelegate applicationDidFinishLaunching:], L:64.|操作3|错误1

郝萌主倾心贡献,尊重作者的劳动成果,请勿转载。

如果文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额随意,重在心意^_^

我要捐赠: 点击捐赠

Cocos2d-X源码下载:点我传送

游戏官方下载:http://dwz.cn/RwTjl

游戏视频预览:http://dwz.cn/RzHHd

游戏开发博客:http://dwz.cn/RzJzI

游戏源码传送:http://dwz.cn/Nret1

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-07-28 12:30:57

iOS开发之使用代码定位性更高的Log的相关文章

【好程序员笔记分享】——iOS开发之纯代码键盘退出

-iOS培训,iOS学习-------型技术博客.期待与您交流!------------ iOS开发之纯代码键盘退出(非常简单)     iOS开发之纯代码键盘退出 前面说到了好几次关于键盘退出的,但是最近开始着手项目的时候却闷了,因为太多了,笔者确实知道有很多中方法能实现,而且令我影响最深的就是 EndEditing,但是因为即有textView,又有TextField而且他们各有不同的方法,虽然笔者现在搞懂了,但是不知道什么时候又不记得 了,而且虽然感觉很简单现在感觉很简单的样子,但是对于没

iOS开发之用代码实现数据库FMDB的操作

iOS开发之用代码实现数据库FMDB的操作 1.简介 需求作用: 如果需要保存大量的结构较为复杂的数据时候, 使用数据库, 例如交规考试项目 常用的数据库: (1)Microsoft SQL Server 2000/2008, 中小企业使用较多 (2)Oracle 比较复杂, 大企业使用较多 (3)Mysql数据库, 网站使用较多 (4)sqlite: 本地数据库, 访问数据足够快, 直接访问文件 足够简单, 功能相对其他数据库软件不是特别齐全, 足够用了  足够小, 系统不超过1M, 适合在移

iOS开发 统计xcode代码行数

如果要统计ios开发代码,包括头文件的,终端命令进入项目目录下,命令如下 find . -name "*.m" -or -name "*.h" -or -name "*.xib" -or -name "*.c" |xargs wc -l 列出每个文件的行数 find . -name "*.m" -or -name "*.h" -or -name "*.xib" -or

iOS开发系列--地图与定位

概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个陌生的地方想要查找附近的酒店.超市等就可以打开软件搜索周边;类似的,还有很多团购软件可以根据你所在的位置自动为你推荐某些商品.总之,目前地图和定位功能已经大量引入到应用开发中.今天就和大家一起看一下iOS如何进行地图和定位开发. 定位 地图 定位 要实现地图.导航功能,往往需要先熟悉定位功能,在iO

转-iOS开发系列--地图与定位

来自: http://www.cnblogs.com/kenshincui/p/4125570.html#autoid-3-4-0 概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个陌生的地方想要查找附近的酒店.超市等就可以打开软件搜索周边;类似的,还有很多团购软件可以根据你所在的位置自动为你推荐某些商品.总之,目前地图和定位功能已经大量引入到应用

iOS开发系列--地图与定位-ios8

概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个陌生的地方想要查找附近的酒店.超市等就可以打开软件搜索周边;类似的,还有很多团购软件可以根据你所在的位置自动为你推荐某些商品.总之,目前地图和定位功能已经大量引入到应用开发中.今天就和大家一起看一下iOS如何进行地图和定位开发. 定位 地图 定位 要实现地图.导航功能,往往需要先熟悉定位功能,在iO

iOS开发技巧 -- 复用代码片段

如果你是一位开发人员在开发过程中会发现有些代码无论是在同一个工程中还是在不同工程中使用率会很高,有经验的人会直接封装在一个类里,或者写成一个宏定义或者把这些代码收集起来,下次直接使用,或者放到xcode的代码片库里,直接使用, 从而提高开发效率: 1. 将常用代码片段封装成一个类里 当一个代码片在一个或多个工程之中经常出现时,把他封装在一个类里面,在使用时候直接传参即可实现对于功能,或者直接把这类放到另一个工程中同样使用: 使用UIAlertView举例 创建一个XF_UIKit类,对于声明文件

iOS开发——高级篇——地理定位 CoreLocation

一.CoreLocation 在移动互联网时代,移动app能解决用户的很多生活琐事,比如周边:找餐馆.找KTV.找电影院等等导航:根据用户设定的起点和终点,进行路线规划,并指引用户如何到达 在上述应用中,都用到了定位和地图功能,在iOS开发中,要想加入这2大功能,必须基于2个框架进行开发CoreLocation :用于地理定位,地理编码,区域监听等(着重功能实现)MapKit :用于地图展示,例如大头针,路线.覆盖层展示等(着重界面展示) 2个热门专业术语LBS :Location Based

ios开发 Block(一) 代码块

一.什么是Blocks      Block是一个C级别的语法以及运行时的一个特性,和标准C中的函数(函数指针)类似,但是其运行需要编译器和运行时支持,从ios4.0开始就很好的支持Block. 二.在ios开发中,什么情况下使用Block      Block除了能够定义参数列表.返回类型外,还能够获取被定义时的词法范围内的状态(比如局部变量),并且在一定条件下(比如使用__block变量)能够修改这些状态.此外,这些可修改的状态在相同词法范围内的多个block之间是共享的,即便出了该词法范围