2013-10-12 13 views
7

Ich habe viele NSLog 's in meiner App - einige von denen oft große Datenmengen drucken - dh Ergebnisse einer Suche. Wird dies einen merklichen Unterschied in der Geschwindigkeit meiner App machen?Wird NSLog meine App verlangsamen?

Ich bin nicht vertraut mit Makros - wäre jemand in der Lage, einen Vorschlag zu machen, der alle NSLogs aktivieren/deaktivieren würde?

+0

Definitiv kann NSLog Ihre App verlangsamen. Wie ernst das ist, hängt natürlich davon ab, wie viel Sie das Makro verwenden. Die meisten Leute verwenden eine Variante eines Makros, das entweder mit einem Kompilier-Flag oder einem Laufzeitschalter ein- und ausgeschaltet werden kann. –

Antwort

14

Ja NSLog könnte Ihre App wegen ihrer Synchronität langsamer machen. So schalten Sie alle NSLog

#ifdef DEBUG 
#define NSLog(...) NSLog(__VA_ARGS__) 
#else 
#define NSLog(...) 
#endif 
+0

Verzeihen Sie meine Ignoranz. Wo würde ich diesen Code einfügen - und wo setze ich den Wert für Debug? Muss ich das in jeder Datei deklarieren, die NSLog aufruft? – JoshDG

+1

@JoshDG können Sie es in die Datei 'Projektname-Prefix.pch' Ihres Projekts einfügen. Die 'DEBUG'-Konstante wird beim Erstellen zum Debuggen automatisch von XCode definiert. – pNre

+0

Oh cool! Vielen Dank! – JoshDG

4

Sie sollten etwas wie DLog von MY CURRENT PREFIX.PCH FILE verwenden. Dadurch wird die Protokollierung in der Versionserstellung deaktiviert. This ist eine großartige Erklärung, warum Sie NSLog im Release-Build nicht behalten sollten.

1

Wenn Ihre App für die Produktion ist zu versuchen, sie zu minimieren. Behalten Sie nur die für Fehler oder mögliche Warnungen nützlich. Wenn Sie sie zum Debuggen verwendet haben, rate ich Ihnen, sie zu entfernen.

0

JA !! Zu viele NSLOgs werden deine App definitiv verlangsamen.

Als Best Practice (pre kompilierte Header-Datei) ich dies in der Regel in meinem PCH hinzufügen

#ifdef DEBUG 
#define DebugLog(f, ...) NSLog(f, ## __VA_ARGS__) 
#else 
#define DebugLog(f, ...) 
#endif 

nur DEBUG in Ihrem Präprozessormakro in Build-Einstellungen für Debug-Ziel aktiviert. Verwenden Sie DebugLog anstelle von NSLog().

Für Ihre Distribution/Release ist DEBUG nicht definiert. Ihre App wird also im Protokoll für die verteilte App nichts drucken.