zoukankan      html  css  js  c++  java
  • 自定义 NSLog以便发版和调试

    问题

    • 开发中用了大量的 NSLog,但是发布时想取消这些 NSLog
    • 开发中是否经常用过 NSLog(@"%s", __FUNCTION__);

    解决问题

    • 新建 ExtendNSLog 类,继承自 NSObject
    • 在 ExtendNSLog.h 中删除默认代码
    • 添加以下函数声明:
    void ExtendNSLog(const char *file, int lineNumber, const char *functionName, NSString *format, ...);
    • 在 ExtendNSLog.m 中删除默认代码
    • 添加以下代码实现:
     1 void ExtendNSLog(const char *file, int lineNumber, const char *functionName, NSString *format, ...) {
     2 
     3     va_list ap;
     4 
     5     va_start(ap, format);
     6 
     7     if (![format hasSuffix: @"
    "]) {
     8         format = [format stringByAppendingString: @"
    "];
     9     }
    10 
    11     NSString *body = [[NSString alloc] initWithFormat:format arguments:ap];
    12 
    13     va_end(ap);
    14 
    15     NSString *fileName = [[NSString stringWithUTF8String:file] lastPathComponent];
    16     fprintf(stderr, "(%s) (%s:%d) %s",
    17             functionName,
    18             [fileName UTF8String],
    19             lineNumber,
    20             [body UTF8String]);
    21 }
    • 新建 PrefixHeader.pch 文件
    • 输入以下内容:
     1 #ifdef __OBJC__
     2 
     3 #import <UIKit/UIKit.h>
     4 #import <Foundation/Foundation.h>
     5 
     6 #import "ExtendNSLog.h"
     7 
     8 #ifdef DEBUG
     9 #define NSLog(args...) ExtendNSLog(__FILE__, __LINE__, __PRETTY_FUNCTION__, args);
    10 #else
    11 #define NSLog(x...)
    12 #endif
    13 
    14 #endif
    • 选择 项目->TARGETS->[ProjectName]->Build Settings
    • 在搜索框输入 prefix header
    • 在 Prefix Header中输入 [ProjectName]/PrefixHeader.pch

    如下图所示

    • 运行测试,如下图修改运行模式

  • 相关阅读:
    JS检测浏览器Adobe Reader插件
    Java Filter防止sql注入攻击
    log4j的基本配置参数
    Log4j.properties配置详解
    使用Spring进行统一日志管理 + 统一异常管理
    springMVC获取request和response
    深入浅出Mybatis-分页
    PROPAGATION_REQUIRED事务管理
    Java String类型数据的字节长度
    构建高并发高可用的电商平台架构实践
  • 原文地址:https://www.cnblogs.com/jiahao89/p/5069861.html
Copyright © 2011-2022 走看看