iOS 10+ NSLog失效

作者: 40c0490e5268 | 来源:发表于2016-09-30 10:47 被阅读941次

    在做项目的时候遇到了这样的问题,写了一个可以识别多种手势的控件,包括单击,双击,连击,拖动等,在测试手势冲突时发现了奇葩的问题.

    首先在手势的响应方法中使用 NSLog 打印出识别出的手势类型,发现打印出的结果断断续续,有时点击两三下打印出一次结果,有时点击一次打印一次,有时连续十几次都没有打印出结果.

    照例先说结论:由于 iOS 10 中 NSLog 的改动,导致 NSLog() 方法失灵.

    (笔者的电脑是黑苹果,版本号10.11.6), Xcode7.3.1,装了 iOS10 的配置包.

    解决方法:使用 printf() 函数代替 NSLog, 可以在宏中定义如下

    #ifndef __OPTIMIZE__

    #define NSLog(...) printf("%f %s %ld :%s\n",[[NSDate date]timeIntervalSince1970],strrchr(__FILE__,'/'),[[NSNumber numberWithInt:__LINE__] integerValue],[[NSString stringWithFormat:__VA_ARGS__]UTF8String]);

    #endif

    这个问题坑了我很久,先是检查自己的代码是不是有手势冲突,一个一个的手势注释,又检查视图的响应流程,又检查动画,线程,计时器等等等等,甚至使用了 UIButton 来代替单击手势,问题依然存在.从模拟器换到真机又换回模拟器,模拟器从 iPhone 到 iPad 都换过依然没什么鸟用.

    在一筹莫展之时,开始进行逐行的代码分析,通过打断点终于发现方法正常执行,而 NSLog() 这一句在执行时并未打印.

    一开始我是不相信 NSLog 会出问题的(尼玛的一开始我也是迷信科学的),但是福尔摩斯(柯南道尔?)有一句话说得好:When you have eliminated the impossible, whatever remains, however improbable, must be the truth. (排除所有的不可能的,剩下的即使再不可思议,那也是真相.)

    祝大家代码顺利,永无 bug.

    爱你们么么哒(づ ̄ 3 ̄)づ

    相关文章

      网友评论

        本文标题:iOS 10+ NSLog失效

        本文链接:https://www.haomeiwen.com/subject/hablyttx.html