`
janedoneway
  • 浏览: 582099 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

在ios iphone编程中使用封装的NSLog来打印调试信息

 
阅读更多

From: http://blog.csdn.net/remote_roamer/article/details/7107320

 

使用NSLog的一个风险是:它的运行会占用时间和设备资源。

简单而粗暴的解决方案是:在release前,将所有的NSLog注释掉。简单有效,但副作用是:下次你要调试时,又得将NSLog一个个取消注释。

 

以release模式编译的程序不会用NSLog输出,而以debug模式编译的程序将执行NSLog的全部功能。

 

解决步骤:

  1. 修改<AppName>-Prefix.pch ,增加以下的宏代码
    1. #ifdef DEBUG  
    2. # define DLog(fmt, ...) NSLog((@"[文件名:%s]\n" "[函数名:%s]\n" "[行号:%d] \n" fmt), __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__);  
    3. #else  
    4. # define DLog(...);  
    5. #endif  
  2. 在程序中使用DLog来替换原来的NSLog
    1. DLog(@"当前程序目录是:%@", [self applicationDocumentsDirectory ]);  

  3. 修改项目的配置,使得在debug编译的时候,编译DLog的宏,产生详细的日志信息,而release的时候,不产生任何控制台输出
    在Other Linker Flags 中,在debug的时候,加入编译属性 -DEBUG
  4. 这样控制台会显示这样的日志信息
    1. 2011-12-27 22:23:53.303 IManager[5449:b603] [文件名:/Users/roamer/Project/ÂõΩÊ≥∞ÂêõÂÆâ/Ëꕉ∏öÈÉ®ÁÆ°ÁêÜiphone/IManager/IManager/AppDelegate.m]  
    2. [函数名:-[AppDelegate application:didFinishLaunchingWithOptions:]]  
    3. [行号:37]   
    4. 当前程序目录是:/Users/roamer/Library/Application Support/iPhone Simulator/4.3.2/Applications/6B0E7B08-5528-468A-B728-0C4580805368/Documents  

    补充:

      1) __VA_ARGS__ 是一个可变参数的宏,很少人知道这个宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持)。宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉的作用,否则会编译出错, 你可以试试。
      2) __FILE__ 宏在预编译时会替换成当前的源文件名
      3) __LINE__宏在预编译时会替换成当前的行号
      4) __FUNCTION__宏在预编译时会替换成当前的函数名称

分享到:
评论

相关推荐

    获取iphone的硬件版本以及系统信息小例子源码

    在iOS开发中,有时我们需要获取iPhone设备的硬件版本和系统信息来实现特定的功能或为了调试目的。本示例代码“GetIOSInfoTest”提供了一种方法来获取这些关键信息。以下将详细介绍如何通过Objective-C编程语言来实现...

    ios中工厂方法的完美实现

    在iOS中,可以使用Objective-C或Swift来实现工厂方法。以下是一个基本的Objective-C实现: ```objc // 产品协议 @protocol ProductProtocol - (void)execute; @end // 具体产品类 @interface ConcreteProductA : ...

    iphone mysql数据库操作代码例子.docx

    代码中使用`NSLog`打印错误信息,这是简单的调试手段。在实际开发中,可能需要更完善的错误处理机制,比如使用`NSAssert`进行断言,或者抛出异常,以便于追踪和修复问题。 7. **内存管理**: 在SQLite操作中,`...

    YQDeviceInfo:iOS设备信息,例如型号,iOS版本,电池电量,CPU,内存

    iOS端 获取设备信息的简单封装 -直接拖到工程中使用 Example Code: 设备型号: NSString *modelSimple = [YQDeviceInfo getDeviceNameWithDetail:NO]; // "iPhone 7" NSLog(@"%@",modelSimple); NSString *...

    iPhone开发之数据库使用

    4. **操作数据库**:iOS应用中通常使用`FMDB`这样的第三方库,它是SQLite3的Objective-C封装,提供了更友好的API来执行SQL命令。例如,使用`FMDB`插入一条记录: ```objc [db executeUpdate:@"INSERT INTO Users ...

    ios地址和地区选择

    内有demo ipad版本,iPhone可能存在适配问题。 另附有封装好的文件(地区选择) 使用方法: 直接将文件拖入项目。 调用方法: CKAddressChooseView *ck = [[CKAddressChooseView alloc]init]; ck.frame = ...

    Xcode入门引导

    Objective-C 中使用 `NSArray` 和 `NSMutableArray` 类来表示不可变和可变数组。数组可以方便地存储和访问一组数据。 通过以上知识点的学习,初学者可以逐步掌握 Xcode 和 Objective-C 的基本使用方法,为进一步...

    iOS通过Soap请求WSDL的例子

    本教程将详细介绍如何在Objective-C中使用SOAP请求与WSDL服务进行交互,特别适用于iPhone应用开发。 首先,我们需要准备一个WSDL2OBJC工具,这是一个开源项目,它能够根据WSDL文件自动生成Objective-C客户端代码。...

    iOS数据库SQLite3基本操作并将内容显示在tableView中

    你可以直接在Objective-C或Swift项目中使用。 2. **创建数据库**: 使用`sqlite3_open()`函数打开或创建数据库文件。例如: ```objc sqlite3 *database; if (sqlite3_open([databasePath UTF8String], &database)...

    iphone sqlite 例子

    下面我们将深入探讨如何在iPhone应用中使用SQLite,并通过代码示例来理解其工作原理。 1. **SQLite简介** SQLite是一种关系型数据库管理系统,支持SQL标准,具有事务处理、备份、恢复和多线程等功能。在iOS应用中...

    ios sqlite数据库操作

    在iOS中,我们通常通过C语言的SQLite3 API来与数据库交互。要使用SQLite3,需要在项目中导入sqlite3库。 1. **打开或创建数据库** 在iOS中,SQLite数据库文件通常存放在应用程序的沙盒目录下。可以使用`...

    iphone开发初探

    在iPhone开发中,首要了解的是苹果公司选择Objective-C作为其原生开发语言。Objective-C是在C语言的基础上扩展的,增加了面向对象编程(OOP)的功能。它的核心仍然是C语言,但具备了像Java一样的垃圾回收机制,不过...

    xcode如何打包封装

    在iOS开发过程中,经常会遇到需要将一些通用的功能或者模块封装成库供其他项目使用的情况。这种库通常被称为静态库或动态库。静态库(.a文件)是一种常见的形式,它可以将多个源文件(.m文件)封装起来,并通过相应的...

    苹果游戏编程

    - **控制台打印**:OC使用`NSLog`函数替代C语言中的`printf`来输出信息。 3. **常用数据类型**: - **整型**:`NSInteger` - **布尔类型**:`BOOL` - **结构体**:`NSRange` - **字符串**:`NSString` 4. **...

    Objective-C程序设计详细文档,适合初学者

    Objective-C是一种面向对象的编程语言,它在Apple的Mac OS X和iOS操作系统中广泛使用,是开发iPhone、iPad等Apple设备应用的主要语言。对于初学者来说,了解Objective-C的基础概念和编程模式至关重要。 首先,我们...

    Objective-C笔试及答案

    - **知识点解释:** 封装指的是将对象的状态信息隐藏在对象内部,对外只公开有限的接口供外部访问;继承是指类之间的一种关系,一个类可以从另一个类那里继承属性和方法;多态是指同一个操作作用于不同的对象,可以有...

    Objective-C CN 2.0

    它们可以捕获外部变量的状态,并在不同的上下文中使用。块在实现异步操作和回调时非常有用。 - **垃圾回收(Garbage Collection,GC)**:虽然 GC 在 Objective-C 2.0 中是可选的,但它提供了一种自动管理内存的方式...

    The Objective-C Programming Language

    Objective-C 2.0引入了对垃圾回收的支持,虽然iOS平台后来转向了自动引用计数(ARC),但在某些旧系统中仍然可以使用。 #### 三、Objective-C语法基础 **1. 导入框架** Objective-C使用`#import`指令来导入其他...

    iPhone Application Programming L02: Interface Builder

    本章节主要介绍了iPhone应用编程中的Interface Builder工具以及Objective-C的一些基础类库(Foundation Classes)。Interface Builder是Xcode集成开发环境的一部分,用于创建iOS应用程序的用户界面。此外,还深入...

Global site tag (gtag.js) - Google Analytics