• [转载]IOS项目打包除去NSLog和NSAssert处理之阿堂教程


    原文链接地址:http://blog.sina.com.cn/s/blog_81136c2d0102v1ck.html

             使用过ios开发的网友都知道,我们使用NSLog和NSAssert的目的是为了调试,并在调试阶段输出一些信息,但是在调试结束,应用发布后,如果还使用NSLog和NSAssert输出信息,那样会影响性能。事实上,这个工作量比较大,而且刚刚移除掉时,你会发现又要进行调试,然后再把NSLog和NSAssert加入到程序中,很麻烦!
            对于此问题,有没有解决办法呢?答案是肯定的,事实上在ios中定义了scheme的解决方案。下面阿堂将总结分享下具体的操作过程,与广大网友分享下。
            具体操作时,我们需要设定两套不同的编译参数环境,我们把这个环境称为scheme。xcode中的scheme是一些target的集合,它们配置不同的编译参数,也可能包括了一些可运行的测试集合。xcode中的scheme位于xcode的左上角,如下图,点击 PresentationLayer会弹出scheme菜单,从中可以编辑,新建和管理scheme。
    [转载]IOS项目打包除去NSLog和NSAssert处理之阿堂教程

    从上图中,我们选择new scheme菜单项,接着会弹出一个对话框,从中选择target为 PresentationLayer,如下图所示
    [转载]IOS项目打包除去NSLog和NSAssert处理之阿堂教程

    然后点击ok按钮就创建成功了,这样刚创建好的scheme为PresentationLayer2。
    [转载]IOS项目打包除去NSLog和NSAssert处理之阿堂教程




    此时再选择edit scheme菜单项编辑 PresentationLayer2.如下图,选择info标签,将build configuration(编辑配置)修改为release。这里说明下编译配置各个项的含义: debug是为调试编译而配置的,release 是为了发布编译而配置的。




    [转载]IOS项目打包除去NSLog和NSAssert处理之阿堂教程


    由于我们需要为不同的scheme配置不同的参数。由于移除NSLog和NSAssert的方式不同,所以下面我们分别介绍一下它们。

    . 移除NSAssert
    移除NSAssert比较简单,我们需要在target中选择build settings, 找到 preprocessor macros(预处理宏)项目,配置它的release为 NS_BLOCK_ASSERTIONS, 具体操作步骤为: 双击release的空白处,此时会弹出对话框,点击对话框中的+添加NS_BLOCK_ASSERTIONS,如下图。
    [转载]IOS项目打包除去NSLog和NSAssert处理之阿堂教程

    NS_BLOCK_ASSERTIONS是foundation框架中定义好的预处理宏,如果在编译环境中设置NS_BLOCK_ASSERTIONS,在编译的时候nsassert宏将被移除,我们可以分别运行scheme中的
    PresentationLayer-->iPhone 6.0 Simulator 和
    PresentationLayer2-->iPhone 6.0 Simulator
    进行测试。
    比较测试结果,可以发现PresentationLayer会抛出异常,而 PresentationLayer2可以执行通过。
    结果如下图
    [转载]IOS项目打包除去NSLog和NSAssert处理之阿堂教程


    [转载]IOS项目打包除去NSLog和NSAssert处理之阿堂教程


    二. 移除NSlog

    移除NSLog 比NSAssert复杂一些,需要修改代码。思路是重新定义一个宏替代NSLog,这个宏是有条件编译的。为了能够在工程所有源代码中使用这个宏,需要在<工程名>-Prefix.pch文件中定义这个宏。这个文件引入的.h文件和定义的宏作用于全部工程中的源代码模块,这样可以省去在每个.h文件中定义宏。打开 PresentationLayer工程中的PresentationLayer-Prefix.pch,添加定义新的日志宏

    #ifdef DEBUG
    #    define DLog(...) NSLog(__VA_ARGS__)
    #else
    #    define DLog(...)
    #endif


    编译器在编译的时候判断是否定义DEBUG,如果定义了,则使用DLog替代NSLog。
    #ifdef...#else...#endif是条件编译语句,是在编译的时候编译器进行判断。

    与移除nsassert类似,需要在target中选择build settings,找到Preprocessor Macros项目,配置它的Debug 为DEBUG或(DEBUG=1),如下图
    [转载]IOS项目打包除去NSLog和NSAssert处理之阿堂教程




    我们可以分别运行scheme中的
    PresentationLayer-->iPhone 6.0 Simulator 和
    PresentationLayer2-->iPhone 6.0 Simulator
    进行测试,可以发现PresentationLayer执行时会有日志输出,而 PresentationLayer2则没有。
    如果一件事情你觉得难的完不成,你可以把它分为若干步,并不断寻找合适的方法。最后你发现你会是个超人。不要给自己找麻烦,但遇到麻烦绝不怕,更不要退缩。 电工查找电路不通点的最快方法是:分段诊断排除,快速定位。你有什么启示吗? 求知若饥,虚心若愚。 当你对一个事情掌控不足的时候,你需要做的就是“梳理”,并制定相应的规章制度,并使资源各司其职。
  • 相关阅读:
    DQL 组合连接多个字段
    twig的 function 学习
    twig的 tests 学习
    贴一个自定义的 symfony 的表单皮肤 应用bootstrap效果
    symfony2使用form指定的checkbox,设置其属性disabled
    twig 模板设计 快速入门手册 中文
    MyEclipse中J2ee项目的一些Java文件报错!
    JavaScript的三种代码书写格式
    VB的学习及使用总结
    CSS优先级的说明
  • 原文地址:https://www.cnblogs.com/wvqusrtg/p/4554700.html
Copyright © 2020-2023  润新知