代码之家  ›  专栏  ›  技术社区  ›  bpapa

在构建用于分发的应用程序时,是否存在留下nslog语句的危险?

  •  15
  • bpapa  · 技术社区  · 15 年前

    出于某种原因,在我的开发周期中,我发现自己正在删除我插入以帮助调试的nslog语句。我真的不知道为什么我会有这种习惯,我只是去做而已。

    有时,在开发过程中,我会发现我会遇到以前遇到的问题,然后最终会重新添加一个旧的nslog语句。稍后再删除。

    是否有充分的理由删除nslog语句?从我的经验来看,一个或两个在没有造成任何应用程序拒绝。据我所知,当一个应用程序在发行时,他们不会在任何地方记录任何东西(如果我在这方面有错,请纠正我),看起来他们不会伤害任何东西。有什么值得我担心的性能问题吗?

    3 回复  |  直到 15 年前
        1
  •  21
  •   coneybeare    15 年前

    我要做的是添加一个宏,它只在我处于调试模式时进行日志记录。把这个放进你的 <APP_NAME>_Prefix.pch 文件

    #ifdef DEBUG
    #define DebugLog( s, ... ) NSLog( @"<%p %@:%d (%@)> %@", self, [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__,  NSStringFromSelector(_cmd), [NSString stringWithFormat:(s), ##__VA_ARGS__] )
    #else
    #define DebugLog( s, ... ) 
    #endif
    

    作为常规日志的额外功能,您可以获得文件名、方法名和行号。

    然后在项目信息中,仅在调试版本下添加此项。它进入了 User-defined GCC预处理器定义下的章节:

    DEBUG

    然后用debuglog替换项目中的任何nslog(它使用与nslog相同的参数),您就不必担心实时发布调试语句了。

    在回答你的问题时,日志记录会降低应用程序的性能,除非你需要它们在野外帮助调试,否则我会把它们放在一边。

        2
  •  6
  •   Vladimir    15 年前

    有一个(IMO) nice post 关于这一点,包括一个可能的解决方案。

        3
  •  4
  •   SEQOY Development Team    15 年前

    如果你有大量的日志, 您的应用程序可能会慢一些。 登录到控制台消耗一些 处理。

    完成答案后,我们将使用一大组调试常量。享受。

    // Uncomment the defitions to show additional info.
    
    //  #define DEBUG
    
    //  #define DEBUGWHERE_SHOWFULLINFO
    
    //  #define DEBUG_SHOWLINES
    //  #define DEBUG_SHOWFULLPATH
    //  #define DEBUG_SHOWSEPARATORS
    //  #define DEBUG_SHOWFULLINFO
    
    
    // Definition of DEBUG functions. Only work if DEBUG is defined.
    #ifdef DEBUG 
    
        #define debug_separator() NSLog( @"────────────────────────────────────────────────────────────────────────────" );
    
        #ifdef DEBUG_SHOWSEPARATORS
            #define debug_showSeparators() debug_separator();
        #else
            #define debug_showSeparators()
        #endif
    
        /// /// /// ////// ///// 
    
        #ifdef DEBUG_SHOWFULLPATH
            #define debug_whereFull() debug_showSeparators(); NSLog(@"Line:%d : %s : %s", __LINE__,__FILE__,__FUNCTION__); debug_showSeparators(); 
        #else
            #define debug_whereFull() debug_showSeparators(); NSLog(@"Line:%d : %s : %s", __LINE__,[ [ [ [NSString alloc] initWithBytes:__FILE__ length:strlen(__FILE__) encoding:NSUTF8StringEncoding] lastPathComponent] UTF8String ] ,__FUNCTION__); debug_showSeparators(); 
        #endif
    
        /// /// /// ////// ///// 
    
        #define debugExt(args,...) debug_separator(); debug_whereFull(); NSLog( args, ##__VA_ARGS__); debug_separator();
    
        /// /// /// ////// ///// Debug Print Macros
    
        #ifdef DEBUG_SHOWFULLINFO
            #define debug(args,...) debugExt(args, ##__VA_ARGS__);
        #else
            #ifdef DEBUG_SHOWLINES
                #define debug(args,...) debug_showSeparators(); NSLog([ NSString stringWithFormat:@"Line:%d : %@", __LINE__, args ], ##__VA_ARGS__); debug_showSeparators();
            #else
                #define debug(args,...) debug_showSeparators(); NSLog(args, ##__VA_ARGS__); debug_showSeparators();
            #endif
        #endif
    
        /// /// /// ////// ///// Debug Specific Types
    
        #define debug_object( arg ) debug( @"Object: %@", arg );
        #define debug_int( arg ) debug( @"integer: %i", arg );
        #define debug_float( arg ) debug( @"float: %f", arg );
        #define debug_rect( arg ) debug( @"CGRect ( %f, %f, %f, %f)", arg.origin.x, arg.origin.y, arg.size.width, arg.size.height );
        #define debug_point( arg ) debug( @"CGPoint ( %f, %f )", arg.x, arg.y );
        #define debug_bool( arg )   debug( @"Boolean: %@", ( arg == YES ? @"YES" : @"NO" ) );
    
        /// /// /// ////// ///// Debug Where Macros
    
        #ifdef DEBUGWHERE_SHOWFULLINFO
            #define debug_where() debug_whereFull(); 
        #else
            #define debug_where() debug(@"%s",__FUNCTION__); 
        #endif
    
        #define debug_where_separators() debug_separator(); debug_where(); debug_separator();
    
        /// /// /// ////// /////
    
    #else
        #define debug(args,...) 
        #define debug_separator()  
        #define debug_where()   
        #define debug_where_separators()  
        #define debug_whereFull()   
        #define debugExt(args,...)
        #define debug_object( arg ) 
        #define debug_int( arg ) 
        #define debug_rect( arg )   
        #define debug_bool( arg )   
        #define debug_point( arg )
        #define debug_float( arg )
    #endif