Есть ли опасность в отъезде операторов NSLog при создании приложения для распределения?

Можно пользоваться сторонняя библиотека, такая как SharpZip, как указал Tom.

Иначе (не идя сторонний) должен использовать Windows Shell API. Необходимо будет установить ссылку на библиотеку COM Microsoft Shell Controls и Автоматизации в проекте C#. У Gerald Gibson есть пример в:

интернет-копия Архива мертвой страницы

15
задан bpapa 4 November 2009 в 14:47
поделиться

3 ответа

Я добавляю макрос, который ведет журнал только тогда, когда я нахожусь в режиме отладки. Поместите это в свой файл _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_PREPROCESSOR_DEFINITIONS:

DEBUG

Затем замените любой из NSLog, который есть в вашем проекте, на DebugLog (он принимает те же аргументы, что и NSLog), и вы выиграли ' Мне не нужно беспокоиться о выпуске отладочных операторов в реальном времени.

Отвечая на ваш вопрос, ведение журнала может замедлить производительность приложения, и если они вам не понадобятся для помощи в отладке в дикой природе, я бы их не упомянул.

21
ответ дан 1 December 2019 в 02:02
поделиться

Там есть (imo) хороший пост об этом с возможным решением.

6
ответ дан 1 December 2019 в 02:02
поделиться

Если у вас много журналов, Ваше приложение могло быть медленнее. Войдите в консоль, потребляйте немного обработка.

Завершая ответы, мы дадим одну большую коллекцию отладочных констант, которые мы используем. Наслаждайтесь.

// 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
4
ответ дан 1 December 2019 в 02:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: