Non è raro vedere iOS consulenza per lo sviluppo lungo le linee di: blocchi di denominazione in ogg-c?
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// work in background
NSLog(@"%s work", __PRETTY_FUNCTION__);
dispatch_async(dispatch_get_main_queue(), ^{
// update UI on main queue
NSLog(@"%s updateUI", __PRETTY_FUNCTION__);
});
});
Questo è grande, ma può essere difficile da eseguire il debug quando qualcosa va storto. Guardando l'output:
AppName[1051:4013] __47-[Classname methodName]_block_invoke_0 work
AppName[1051:907] __block_global_0 updateUI
La prima riga del registro ha i nomi di classe e metodo in modo abbiamo qualche speranza di rintracciare un problema nel blocco esterno (si spera non abbiamo definito molti blocchi in questo metodo), ma la seconda linea di log (dal blocco interno)? Buona fortuna, soprattutto se hai usato questo schema molto nella tua app.
C'è un modo per fornire i nomi dei blocchi che ci aiuteranno a identificare le loro posizioni di origine nell'output della console e nei registri degli arresti anomali?
In alternativa, è possibile impostare un punto di interruzione nel blocco e il debugger emetterà una traccia stack quando viene raggiunta (che è IME più utile di 'NSLog' nella maggior parte dei casi). –
Anche io uso i breakpoint e non mi sono mai sentito svantaggiato dai blocchi. – danh
Non penso che ci sia un nome costruito per i blocchi, ma puoi certamente denominare le code, il che ti porta in parte. Questo si presenta nel debugger e puoi includerlo nell'istruzione NSLog. In alternativa, puoi usare anche '__FILE__' e' __LINE__'. Forse definisci la tua macro che è una combinazione di quanto sopra. – Rob