E se eu tivesse um DeLorean? - TDC 2012

1,017 views

Published on

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)

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,017
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
7
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

E se eu tivesse um DeLorean? - TDC 2012

  1. 1. E se eu tivesse um DeLorean?!Dicas para o Eu do passadoMarcelo FabriDextra Sistemashttp://www.dextra.com.br/@marcelofabri_
  2. 2. E se eu tivesse um DeLorean?!
  3. 3. Planejamento• Por onde começar?• Dicas gerais• Problemas de performance• Bibliotecas úteis
  4. 4. 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/• StackOverflow http://stackoverflow.com
  5. 5. 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
  6. 6. http://www.textfromxcode.com
  7. 7. 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
  8. 8. Ferramentas• TestFlight https://testflightapp.com• CocoaPods http://cocoapods.org• Dev Rocket http://devrocket.uiparade.com
  9. 9. Gerenciamento de memória • Use o ARC! • Cuidado com leaksGerenciamento de memória e ARC 13:10
  10. 10. 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
  11. 11. GCDdispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // algo demorado... dispatch_async(dispatch_get_main_queue(), ^{ // atualização de UI view.hidden = NO; }); });
  12. 12. 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];
  13. 13. Customização de Inteface• Não use categories• UIAppereance (iOS 5+)• Herança
  14. 14. Customização de Inteface@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
  15. 15. 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;
  16. 16. Reutilize• Instanciar objetos é custoso• Cuidado com NSCalendar, NSDateFormatter • Prefira 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 reuseIdentifier em UITableViews• Utilize a ideia em seus componentes de tela
  17. 17. Verifique a performance• Simulador != dispositivo• Static Analyzer• Instruments• Não ache. Meça.• Tenha certeza• Otimize• Meça de novo
  18. 18. 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
  19. 19. Desenhando• Nunca chame drawRect: de maneira explicíta• Chame setNeedsDisplay• Declare views opacas quando possível• OpenGL ES? GLKit?
  20. 20. Bibliotecas úteis• Alguém já deve ter feito isso...• AFNetworking • QuickDialog• JSONKit• CorePlot• MBProgressHUD• Reachability• ShareKit• SFHFKeychainUtils• SSToolkit

×