e se eu tivesse um delorean? - tdc 2012
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
![Page 1: E se eu tivesse um DeLorean? - TDC 2012](https://reader035.vdocuments.pub/reader035/viewer/2022062704/55621835d8b42a00138b5530/html5/thumbnails/1.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062704/55621835d8b42a00138b5530/html5/thumbnails/2.jpg)
E se eu tivesse um DeLorean?!
![Page 3: E se eu tivesse um DeLorean? - TDC 2012](https://reader035.vdocuments.pub/reader035/viewer/2022062704/55621835d8b42a00138b5530/html5/thumbnails/3.jpg)
Planejamento
• Por onde começar?
•Dicas gerais
• Problemas de performance
• Bibliotecas úteis
![Page 4: E se eu tivesse um DeLorean? - TDC 2012](https://reader035.vdocuments.pub/reader035/viewer/2022062704/55621835d8b42a00138b5530/html5/thumbnails/4.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062704/55621835d8b42a00138b5530/html5/thumbnails/5.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062704/55621835d8b42a00138b5530/html5/thumbnails/7.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062704/55621835d8b42a00138b5530/html5/thumbnails/8.jpg)
Ferramentas
• TestFlight https://testflightapp.com
• CocoaPods http://cocoapods.org
•Dev Rockethttp://devrocket.uiparade.com
![Page 9: E se eu tivesse um DeLorean? - TDC 2012](https://reader035.vdocuments.pub/reader035/viewer/2022062704/55621835d8b42a00138b5530/html5/thumbnails/9.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062704/55621835d8b42a00138b5530/html5/thumbnails/10.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062704/55621835d8b42a00138b5530/html5/thumbnails/11.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062704/55621835d8b42a00138b5530/html5/thumbnails/12.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062704/55621835d8b42a00138b5530/html5/thumbnails/13.jpg)
Customização de Inteface
•Não use categories
•UIAppereance (iOS 5+)
•Herança
![Page 14: E se eu tivesse um DeLorean? - TDC 2012](https://reader035.vdocuments.pub/reader035/viewer/2022062704/55621835d8b42a00138b5530/html5/thumbnails/14.jpg)
@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](https://reader035.vdocuments.pub/reader035/viewer/2022062704/55621835d8b42a00138b5530/html5/thumbnails/15.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062704/55621835d8b42a00138b5530/html5/thumbnails/16.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062704/55621835d8b42a00138b5530/html5/thumbnails/17.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062704/55621835d8b42a00138b5530/html5/thumbnails/18.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062704/55621835d8b42a00138b5530/html5/thumbnails/19.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062704/55621835d8b42a00138b5530/html5/thumbnails/20.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062704/55621835d8b42a00138b5530/html5/thumbnails/21.jpg)
![Page 22: E se eu tivesse um DeLorean? - TDC 2012](https://reader035.vdocuments.pub/reader035/viewer/2022062704/55621835d8b42a00138b5530/html5/thumbnails/22.jpg)