Você está na página 1de 37

DESENVOLVIMENTO APLICATIVOS IOS

Ambiente - SDK - Conceitos

Wednesday, February 2, 2011


TÓPICOS

• Tópicos

• Mostrar o ambiente de desenvolvimento: Mac + SDK;

• Ferramentas de trabalho: Xcode, Interface Builder, etc.;

• Conceitos: o iOS, linguagem, frameworks, layers;

• Objective-C inicial: objetos, sintaxe, memória.

Wednesday, February 2, 2011


FERRAMENTAS

• Ambiente Mac OS X
Sistema Operacional proprietário da Apple
O iOS é baseado diretamente no Mac OS X
Baseado em um sistema BSD/UNIX - NeXT (NeXTStep)

• Ambiente iOS SDK (antigo iPhone OS SDK)


IDE (Xcode) e diversas ferramentas adicionais
Exclusivamente disponível para Mac OS X (sem hacks!)

Wednesday, February 2, 2011


FERRAMENTAS

• Ambiente Mac OS X
Buscar SDK (iOS SDK), abrir, ambientar-se...

• Ferramentas principais (SDK):

• Xcode (IDE)

• Interface Builder

• Instruments

Wednesday, February 2, 2011


APARELHOS E SISTEMAS

• Temos como target alguns aparelhos e sistemas;

• Versão de aparelho != versão de sistema != SDK;

• Aparelhos: iPhone, iPod e iPad;

• Todos utilizam o mesmo sistema operacional (iOS);

• Todos têm tecnologias similares, poucas diferenças;

• Existe um simulador que ajuda a... simular os aparelhos.

Wednesday, February 2, 2011


SISTEMAS E SDK

• Sistemas
Versão atual: iOS 4 (4.2.1) - beta iOS 4.3

• SDK
Versão atual: 3.2 (3.2.5) - preview 4

• Aparelhos: algumas limitações para uso de sistemas

Wednesday, February 2, 2011


APARELHOS E TARGETS

•O SDK (3.2) gera produtos (de projetos) para targets

• Os targets incluem aparelhos: iPhone, iPod e iPad com iOS

•O iOS (no iPhone, iPod & iPad) “executa” os aplicativos

• Dispositivo (device)
Apenas com certificado

• Simulador (simulator)

Wednesday, February 2, 2011


IOS - LAYERS

• Core OS: iOS - Kernel, BSD, Sockets, File System, etc.

• Core Services: Arquivos, Coleções, Contatos, SQLite, etc.

• Media: Core Animation, Core Audio, PDF, Video, etc.

• Cocoa Touch: Câmera, alertas, controles, Multi-Touch, etc.

Wednesday, February 2, 2011


IOS LAYERS - FRAMEWORKS

• Layers inferiores: recursos essenciais do sistema todo;

• Layers superiores: recursos avançados, sofisticados;

• Prefira usar layers superiores no lugar de inferiores;

• Quando for possível (e sempre que permitido).

• Em alguns casos, use algo “de fora”: p.ex., TouchXML.

• Nota: “Device frameworks” e “Simulator frameworks” (!!!)

Wednesday, February 2, 2011


IOS LAYERS - FRAMEWORKS

• Cocoa Touch: Multitasking, Data Protection, Apple Push Notification Service, Local
Notifications, Gesture Recognizers, File-Sharing Support, Peer to Peer Services, Standard
System View Controllers, External Display Support...

• Os aplicativos devem ser iniciados por aqui;

• Frameworks: Address Book, Event Kit, Game Kit, Map Kit, Message UI, iAd, UIKit,
entre outros (crescendo...)

Wednesday, February 2, 2011


IOS LAYERS - FRAMEWORKS

• Media: Gráficos (Core Graphics, Core Animation, OpenGL ES, Core Text,
Assets, entre outros), Áudio (Media Player, AV Foundation, OpenAL, Core Audio),
Vídeo (Media Player, AV Foundation, Core Media)

• Frameworks: Assets Library, AV Foundation, Core Audio, Core Graphics, Core


Text, Core Video, Image I/O, Media Player, OpenAL, OpenGL ES, Quartz Core,

Wednesday, February 2, 2011


IOS LAYERS - FRAMEWORKS

• Services: Block Objects, Grand Central Dispatch, In-App Purchase, Location


Services, SQLite, XML Support, Data Structures

• Frameworks: Address Book (lower level!), CFNetwork, Core Data, Core


Foundation, Core Location, Core Media, Core Telephony, Event Kit, Foundation,
Mobile Core Services, Quick Look, Store Kit, System Configuration

Wednesday, February 2, 2011


IOS LAYERS - FRAMEWORKS

• Core OS: sistema operacional iOS (antigo iPhone OS)

• Um sistema baseado em UNIX

• Este “layer” sempre está sendo usado (indiretamente)

• Frameworks: Accelerate, External Accessory, Security, System (o próprio sistema


operacional, aka POSIX/UNIX)

Wednesday, February 2, 2011


IOS - APLICATIVOS

Wednesday, February 2, 2011


IOS - APLICATIVOS

• Até 2007/2008: não existiam “aplicativos” (só os da Apple)

• App Store (SDK): aplicativos de “terceiros”

• Aplicativos são “enjaulados” (isolados de outros)

• Só criamos aplicativos (não drivers, componentes, etc)

• Hoje são mais de 300.000 aplicativos

• Hoje são mais de 10 bilhões de downloads

Wednesday, February 2, 2011


SDK - ADC E DOWNLOAD

Wednesday, February 2, 2011


SDK - ADC E DOWNLOAD

• ADC (Apple Developer Connection)

• Endereço: http://developer.apple.com

• Nosso foco: iOS Dev Center

• Conta de acesso Apple ID: gratuito

• Registro de desenvolvedor: $99/ano ou $299/ano

Wednesday, February 2, 2011


LINGUAGEM OBJECTIVE-C

• Classes e formato de OO - interface, implementation

• Objetos, métodos, seletores (selectors), argumentos, tipos

• Sintaxe de utilização geral

• Gerenciamento de memória

Wednesday, February 2, 2011


LINGUAGEM OBJECTIVE-C

• Baseado em C (um “superset” de C), quase só Apple

• Adiciona OO (Smalltalk) com sua própria sintaxe

• Tem um runtime simples: por “baixo”, é tudo C padrão

• Também conhecida/chamada ObjC (atualmente 2.0)

• Linguagem sem GC, garbage collector (oposto JVM, CLR, etc)

• Manipulação direta de memória (e ponteiros)

Wednesday, February 2, 2011


OBJ-C SINTAXE
// Classe que representa um produto.

@interface Produto : NSObject <protocolos>


{
NSString *nome;
float preco;
}

- (void)incrementaPreco:(float)quanto;
- (void)incrementaPrecoComNumber:(NSNumber *)quanto;

- (float)precoTotal;
+ (NSString *)formataNome:(Produto *)produto;

@end

Wednesday, February 2, 2011


OBJ-C SINTAXE

• Classe: Produto

• Super-classe (herança): NSObject

• Não existe herança múltipla

• Todas as classes acabam herdando de NSObject

• Métodos de instância (objeto) e classe (estáticos)

• Primitivos (float, int, BOOL...) e objetos (NSString, NSArray...)

Wednesday, February 2, 2011


OBJ-C SINTAXE

• Uma classe implementa zero ou mais protocolos

• Exemplo: UITextFieldDelegate

• Os “métodos” são chamados de/por selectors

• Exemplo de selector: incrementaPreco:comJuros:

• incrementaPrecoComJuros(preco, juros)

• Existe separação: interface (.h) e implementação (.m)

Wednesday, February 2, 2011


OBJ-C SINTAXE

// Classe que representa um produto.

@interface Produto : NSObject <protocolos>


{
NSString *nome;
float preco;
}

- (void)incrementaPreco:(float)quanto;
- (float)precoTotal;
+ (NSString *)formataNome:(Produto *)produto;

@end

Wednesday, February 2, 2011


OBJ-C SINTAXE: .M (IMPL)

@implementation Produto

- (void)incrementaPreco:(float)quanto
{
preco = preco + quanto;
}

- (float)precoTotal
{
return preco;
}

@end

Wednesday, February 2, 2011


OBJ-C SINTAXE: MENSAGEM
// Chama método “incrementaPreco” do “produto1”.
// Também conhecido como ‘envia mensagem ...’.

[produto1 incrementaPreco:10.0];

// Faz incremento do preco do produto1 com o


// valor do produto2.

[produto1 incrementaPreco:[produto2 precoTotal]];

Wednesday, February 2, 2011


OBJ-C SINTAXE

// Novo produto3 (instanciação), tradicional.

Produto *produto3 = [[Produto alloc] init];

// Faz instanciação com “new”.


// É o equivalente de alloc + init (NSObject).

Produto *produto3 = [Produto new];

Wednesday, February 2, 2011


OBJ-C SINTAXE

• Dicas de nomes/escrita:

•A escrita em inglês é recomendada

• Classes iniciam com Maiúscula, objeto minúscula

• Nomes de métodos (selectors) bem descritivos

• Não empilhe muitos [[[[ ... ] ... ] ... ] ... ] (difícil de ler/depurar)

• Jamais tente copiar algo, use completion

Wednesday, February 2, 2011


XCODE TIPS & TRICKS

• Use Code Completion

• Use Quick Help

• Use Jump to Definition

• Alternando entre interface e implementation

Wednesday, February 2, 2011


OBJ-C SINTAXE
// Tipo “genérico” (void *) - id

id objeto;

objeto = produto3;

// Assinatura de “incrementaPreco”: selector

SEL incrementa = @selector(incrementaPreco:);


[objeto canPerformSelector(incrementa)];

Wednesday, February 2, 2011


OBJ-C SINTAXE: PROPERTY
@interface Produto : NSObject
{
NSString *nome;
float preco;
}

@property (nonatomic, retain) NSString *nome;


@property (nonatomic, assign) float preco;

@end

@implementation Produto

@synthesize nome, preco;

...

@end

Wednesday, February 2, 2011


OBJ-C SINTAXE: PROPERTIES
Produto *produto1 = [[Produto alloc] init];

produto1.nome = @”Doritos”;
produto1.preco = 2.75;

NSMutableArray *produtos = [[NSMutableArray alloc] init];

[produtos addObject:produto1];
[produto1 release];

NSLog(@”Total de produtos: %d”, [produtos count]);

NSMutableDictionary *produtos = [[NSMutableDictionary new];

[produtos setObject:produto1 forKey:produto1.nome];


[produto1 release];

Produto *produto3 = [produtos objectForKey:@”Doritos”];

Wednesday, February 2, 2011


MEMÓRIA: REFERÊNCIAS
// Alocação (contador de referências = 1)

Produto *produto1 = [[Produto alloc] init];

// Retenção (contador de referências + 1)

[produto1 retain];

// Liberação (contador de referências - 1)

[produto1 release];

Wednesday, February 2, 2011


MEMÓRIA: REFERÊNCIAS
// Objetos retendo outros objetos (implícito + 1)

Produto *produto1 = [[Produto alloc] init];


...
[produtos addObject:produto1];
[produto1 release];

// Objetos (coleções, etc) retornando objetos.

NSString *nome = [[NSString alloc] initWithFormat:@”..”];


// Contador de referências de ‘nome’: 1

// Objetos (coleções, etc) retornando objetos.

NSString *nome = [NSString stringWithFormat:@”...”];


// Contador de referências de ‘nome’: 1, auto-released

Wednesday, February 2, 2011


MEMÓRIA: REFERÊNCIAS

Wednesday, February 2, 2011


MEMÓRIA: AUTO-RELEASE
// Auto-release pool é um conjunto de objetos.
// Os objetos receberão um ‘release’ em breve (loop).

NSAutoReleasePool *pool = [NSAutoReleasePool new];

nome = [nome stringByAppendingFormat:@”...”];

[pool release];

// Há sempre um pool implícito geral para o aplicativo.

// O ‘autorelease’ é um método que adiciona objetos ao


// pool para serem “released” (ou retidos pelo chamador).

Wednesday, February 2, 2011


MEMÓRIA: AUTO-RELEASE
// O ‘autorelease’ é um método que adiciona objetos ao
// pool para serem “released” (ou retidos pelo chamador).

[objeto autorelease];

- (NSArray *) allProducts
{
NSMutableArray *retorno = [NSMutableArray new];
for (Produto *produto in [produtos allValues])
{
[retorno addObject:produto];
}

return [retorno autorelease];


}

Wednesday, February 2, 2011


FOUNDATION (OBJC)

•O Foundation é o ObjC do Core Foundation


• Muitas coisas úteis, incluindo “estruturas de dados”
• NSArray

• NSDictionary

• NSDate

• NSData ...
• No fundo, tem tudo de C: enum, structs, etc

Wednesday, February 2, 2011

Você também pode gostar