E se eu tivesse um DeLorean? - TDC 2012

22
E se eu tivesse um DeLorean?! Marcelo Fabri Dextra Sistemas http://www.dextra.com.br/ @marcelofabri_ Dicas para o Eu do passado

description

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)

Transcript of E se eu tivesse um DeLorean? - TDC 2012

Page 1: E se eu tivesse um DeLorean? - TDC 2012

E se eu tivesse um DeLorean?!

Marcelo FabriDextra Sistemashttp://www.dextra.com.br/@marcelofabri_

Dicas para o Eu do passado

Page 2: E se eu tivesse um DeLorean? - TDC 2012

E se eu tivesse um DeLorean?!

Page 3: E se eu tivesse um DeLorean? - TDC 2012

Planejamento

• Por onde começar?

•Dicas gerais

• Problemas de performance

• Bibliotecas úteis

Page 4: E se eu tivesse um DeLorean? - TDC 2012

Por onde começar?

• iOS Dev Center https://developer.apple.com/devcenter/ios

• Vídeos da WWDChttps://developer.apple.com/videos

• Ray Wenderlichhttp://raywenderlich.com/

• StackOver!owhttp://stackoverflow.com

Page 5: E se eu tivesse um DeLorean? - TDC 2012

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

Page 7: E se eu tivesse um DeLorean? - TDC 2012

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

Page 8: E se eu tivesse um DeLorean? - TDC 2012

Ferramentas

• TestFlight https://testflightapp.com

• CocoaPods http://cocoapods.org

•Dev Rockethttp://devrocket.uiparade.com

Page 9: E se eu tivesse um DeLorean? - TDC 2012

Gerenciamento de memória

•Use o ARC!

• Cuidado com leaks

Gerenciamento de memória e ARC 13:10

Page 10: E se eu tivesse um DeLorean? - TDC 2012

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

Page 11: E se eu tivesse um DeLorean? - TDC 2012

GCD

dispatch_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; }); });

Page 12: E se eu tivesse um DeLorean? - TDC 2012

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];

Page 13: E se eu tivesse um DeLorean? - TDC 2012

Customização de Inteface

•Não use categories

•UIAppereance (iOS 5+)

•Herança

Page 14: E se eu tivesse um DeLorean? - TDC 2012

@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

Page 15: E se eu tivesse um DeLorean? - TDC 2012

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;

Page 16: E se eu tivesse um DeLorean? - TDC 2012

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

Page 17: E se eu tivesse um DeLorean? - TDC 2012

Veri"que a performance

• Simulador != dispositivo

• Static Analyzer

• Instruments

•Não ache. Meça.

• Tenha certeza

•Otimize

•Meça de novo

Page 18: E se eu tivesse um DeLorean? - TDC 2012

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

Page 19: E se eu tivesse um DeLorean? - TDC 2012

Desenhando

•Nunca chame drawRect: de maneira explicíta

• Chame setNeedsDisplay

•Declare views opacas quando possível

•OpenGL ES? GLKit?

Page 20: E se eu tivesse um DeLorean? - TDC 2012

Bibliotecas úteis

• Alguém já deve ter feito isso...

• AFNetworking

• JSONKit

• CorePlot

•MBProgressHUD

• Reachability

• ShareKit

• SFHFKeychainUtils

• SSToolkit

•QuickDialog

Page 21: E se eu tivesse um DeLorean? - TDC 2012
Page 22: E se eu tivesse um DeLorean? - TDC 2012