Upgrade to Pro — share decks privately, control downloads, hide ads and more …

E se eu tivesse um DeLorean? - TDC 2012

E se eu tivesse um DeLorean? - TDC 2012

Já imaginou como seriam as coisas se você soubesse o que você sabe hoje, alguns anos atrás? Essa palestra tem como objetivo dar algumas dicas que eu queria ter recebido, em relação ao ecossistema iOS, performance, código, e muito mais!

(Palestra apresentada na trilha de iOS do TDC SP 2012)

Marcelo

July 04, 2012
Tweet

More Decks by Marcelo

Other Decks in Programming

Transcript

  1. E se eu tivesse um DeLorean?! Marcelo Fabri Dextra Sistemas

    http://www.dextra.com.br/ @marcelofabri_ Dicas para o Eu do passado
  2. Por onde começar? •iOS Dev Center https://developer.apple.com/devcenter/ios •Vídeos da WWDC

    https://developer.apple.com/videos •Ray Wenderlich http://raywenderlich.com/ •StackOver ow http://stackoverflow.com
  3. Conheça o ecossistema •Acostume-se com Objective-C e seus paradigmas! •Se

    possível, tenha um iDevice •iOS Human Interface Guidelines http://developer.apple.com/library/ios/#documentation/userexperience/conceptual/mobilehig •App Store Review Guidelines https://developer.apple.com/appstore/guidelines.html
  4. Mantenha-se atualizado •Mudanças no SDK a cada major release •Objective-C

    muda também! • Modern Objective-C • Compatível com iOS anteriores http://clang.llvm.org/docs/ObjectiveCLiterals.html NSArray* arr = @[obj1, obj2, obj3, obj4]; NSLog(@"%@", arr[0]); NSDictionary* dict = @{@"quatro": @4, @"flag": @YES, @"vetor": arr, @"texto" : @"TDC 2012!"}; NSLog(@"%@", dict[@"texto"]); iOS6 - O que vem por aí? 17:40
  5. Threads •Nunca trave a thread principal • I/O, laços demorados...

    •Use Grand Central Dispatch (GCD) ou NSOperationQueue •Atualizações de UI apenas na thread principal
  6. Cuidado com nil •Você pode mandar mensagens pra nil (retornam

    nil) •Vantagem ou desvantagem? •Mais difícil de depurar • Objetos que não foram instanciados NSMutableSet* aSet; // ... [aSet addObject:obj]; // ... [aSet anyObject];
  7. @implementation UINavigationBar (CustomImage) - (void)drawRect:(CGRect)rect { UIImage *image = [UIImage

    imageNamed: @"NavigationBar.png"]; [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; } @end [[UINavigationBar appearance] setBackgroundImage:img forBarMetrics:UIBarMetricsDefault]; @interface CustomNavigationBar : UINavigationBar @end @implementation CustomNavigationBar -(void) drawRect:(CGRect)rect { UIImage *image = [UIImage imageNamed: @"NavigationBar.png"]; [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; } @end Customização de Inteface
  8. Seja preguiçoso •Não faça nada até que seja necessário •

    Carregar imagens, nibs, instanciar NSDateFormatters • Elementos de tela: apenas quando estiverem visíveis • Scrollviews, tableviews if (! formatter) { formatter = [[NSDateFormatter alloc] init]; formatter.dateStyle = NSDateFormatterMediumStyle; formatter.timeStyle = NSDateFormatterLongStyle; } return formatter;
  9. Reutilize •Instanciar objetos é custoso •Cuidado com NSCalendar, NSDateFormatter •

    Pre ra criar datas a partir de timestamps, e não strings • Cerca de 25x mais rápido (sem contar a inicialização do formatter) •Sempre use o reuseIdenti er em UITableViews •Utilize a ideia em seus componentes de tela
  10. Veri que a performance •Simulador != dispositivo •Static Analyzer •Instruments

    •Não ache. Meça. •Tenha certeza •Otimize •Meça de novo
  11. Recebendo dados remotos •Assincronamente, sempre! •GZIP no servidor •HTTP com

    JSON/XML •Evite ter que tratar estruturas •Balanceie dados remotos e locais •Google App Engine
  12. Bibliotecas úteis •Alguém já deve ter feito isso... •AFNetworking •JSONKit

    •CorePlot •MBProgressHUD •Reachability •ShareKit •SFHFKeychainUtils •SSToolkit •QuickDialog