Molto spesso durante la scrittura di codice, molto codice, di un’applicazione ci troviamo con dei crash che non riusciamo a capire proprio da dove vengono sopratutto da quale funzione vengano! Articolo correlato ad un post pubblicato nel passato: Capire perché una app crasha.
Andiamo ad esaminare la funzione NSLog con dei parametri aggiuntivi che ci consentono di individuare immediatamente nella console cosa sta succedendo:
[code lang=”obj-c”]- (void)buttonPressed:(UIButton *)button {
NSLog(@"\n Function: %s\n Pretty function: %s\n Line: %d\n File: %s\n Object: %@", __func__, __PRETTY_FUNCTION__, __LINE__, __FILE__, button);
}[/code]
Ed ecco l’output che esce fuori:
Oltre alle macro, ci sono quattro espressioni Objective-C, che forniscono informazioni aggiuntive relative al contesto corrente nel codice. Tre delle quattro espressioni sono indicati nell’esempio che segue:
[code lang=”obj-c”]- (void)buttonPressed:(UIButton *)button
{
NSLog(@"Current selector: %@", NSStringFromSelector(_cmd));
NSLog(@"Object class: %@", NSStringFromClass([self class]));
NSLog(@"Filename: %@", [[NSString stringWithUTF8String:__FILE__] lastPathComponent]);
}
[/code]
La quarta espressione disponibile in Objective-C crea un array, dove ogni voce è una stringa che rappresenta un valore nell’analisi dello stack corrente. Ecco come stampare la traccia dello stack:
[code lang=”obj-c”]NSLog(@"Stack trace: %@", [NSThread callStackSymbols]);[/code]