Desenvolvendo para iOS

32
Desenvolvend o para iOS Cesar Müzel Gonçalves Filho

description

by Cesar Müzel G. Filho

Transcript of Desenvolvendo para iOS

Page 1: Desenvolvendo para iOS

Desenvolvendo para iOS

Cesar Müzel Gonçalves Filho

Page 2: Desenvolvendo para iOS

iPhone o Celular da Apple

iPod

Telefone

InternetSteve Jobs – ex-CEO e cofundador da Apple

2

Page 3: Desenvolvendo para iOS

Objective-C

3

Page 4: Desenvolvendo para iOS

4

Page 5: Desenvolvendo para iOS

5

Page 6: Desenvolvendo para iOS

• https://developer.apple.com/programs/ios/

• Apple ID

• Xcode

• Objective-C

6

Page 7: Desenvolvendo para iOS

Anatomia de um Aplicativo iOS

O que um artista precisa para trabalhar

O que um programador precisa para trabalhar

Tela TintaPincel

Janela ImplementaçãoCabeçalho

7

Page 8: Desenvolvendo para iOS

Objective-C

Interface(Cabeçalho)

Implementação

8

Page 9: Desenvolvendo para iOS

Interface@interface ContaBancaria : NSObject {

float balanco;NSString *nomeDoDono;

}

- (float) sacar:(float)quantidade;- (void) depositar:(float)quantidade;

@end

9

Page 10: Desenvolvendo para iOS

Implementação#import "ContaBancaria.h"

@implementation ContaBancaria

- (id) init {self = [super init];return self;

}- (float) sacar:(float)quantidade {

// calcula quantidade a sacarreturn quantidade;

}- (void) depositar:(float)quantidade {

// somar quantidade ao valor da conta}

@end10

Page 11: Desenvolvendo para iOS

Criando ObjetosJeito Java:ContaBancaria conta = new ContaBancaria();

Jeito Objective-C:ContaBancaria *conta = [[ContaBancaria alloc] init];

11

Page 12: Desenvolvendo para iOS

12

Privilégios de Acesso@protected (padrão)@public@private

Exemplo:@public NSString *nome;

Page 13: Desenvolvendo para iOS

13

Privilégios de AcessoAcessar atributos das classes:

conta->numeroDaConta = 570;conta->nomeDoDono = @”Pedro Cardoso”;

Page 14: Desenvolvendo para iOS

14

Tipos de Métodos / Funções

( - ) Métodos de Instância (dos objetos)

( + ) Métodos de Classe (estáticos)Não precisam que a classe seja instanciada

Page 15: Desenvolvendo para iOS

15

MensagensMétodos não são chamados. Mensagens são enviadas a eles.

Exemplo:[ContaBancaria verificarLimite] método estático

ContaBancaria *conta;[conta depositar: 200.00];[conta transferir: 120 paraContaDe: @”José da Silva”];

Page 16: Desenvolvendo para iOS

16

MensagensOpção: Alocar classe e chamar o método ao mesmo tempo.Não usar uma linha só com mais de 3 ações para não dificultar o entendimento do código.

NSString *str = [[NSString alloc] initWithString:@”Hello”];Init funciona como método construtor.

Page 17: Desenvolvendo para iOS

17

Propriedades e Encapsulamento

Propriedades permitem a você expor os campos de sua classe, assim você pode controlar como os valores são definidos e retornados.

GETTERS & SETTERSACCESSORS & MUTATORS

Page 18: Desenvolvendo para iOS

18

Propriedades e Encapsulamento

@interface Carro {<propriedades>

}- (float) aceleracao; get

- (void) setAceleracao: (float) valor; set

- (NSString *) marca; get

- (void) setMarca: (NSString *) nome;set

<métodos>@end

Page 19: Desenvolvendo para iOS

19

Propriedades e Encapsulamento

- (float) aceleracao {return aceleracao;

}- (void) setAceleracao: (float) valor {

aceleracao = valor;}- (NSString *) marca{

return marca;}- (void) setMarca: (NSString *) nome {

[nome retain];[marca release]; marca = nome ;

}

Gerenciamento de memória

Page 20: Desenvolvendo para iOS

20

Propriedades e Encapsulamento

@interface Carro {<propriedades>

}

@property float aceleracao;@property (retain) NSString *nomeDoDono;@property (readonly) NSString *marca;

<métodos>@end

Page 21: Desenvolvendo para iOS

21

Propriedades e Encapsulamento

//Carro.m...@implementation Carro

@synthesize aceleracao;@synthesize nomeDoDono;@synthesize marca;

...@end

Page 22: Desenvolvendo para iOS

Propriedades e Encapsulamento

Acessando as propriedades

[carro setAceleracao: 5.0f];[carro setNomeDoDono: @”João”];

[carro aceleracao];[carro nomeDoDono];

NSLog([carro aceleracao]);NSLog([carro nomeDoDono]);

22

Accessors

Mutators

Page 23: Desenvolvendo para iOS

23

Initializers / Construtores

• Para criar diversos inicializadores é necessário defini-los no cabeçalho (ex.: carro.h).

- (id) initComMarca: (NSString *) nome;

- (id) initComMarca: (NSString *) nome eAceleracao: (float) valor;

Page 24: Desenvolvendo para iOS

24

Initializers / Construtores

Implementação

- (id) initComMarca: (NSString *) nome eAceleracao: (float) valor {

marca = nome;aceleracao = valor;

return self;}

- (id) initComMarca : (NSString *) nome {return [self initComMarca: nome eAceleracao: 0.0f];

}

Page 25: Desenvolvendo para iOS

25

Initializers / Construtores

Instanciar e Inicializar

Carro *mustang [[Carro alloc] initComMarca: @”Ford”];

Page 26: Desenvolvendo para iOS

26

Gerenciamento de Memória

Garbage Colletor: Remove objetos que não estão sendo mais utilizados liberando espaço em memória.

Até o IOS 4.0 não havia suporte ao G.C. Então o desenvolvedor precisava manualmente alocar e desalocar a memória dos objetos que deixassem de ser utilizados.

Page 27: Desenvolvendo para iOS

27

Reference CountingR.F é um contador para cada objeto. +1 -> Quando o objeto é criado (alloc, new)

-1 -> Quando o objeto é desalocado (release)

Quando o contador chega a 0(Zero), a memória associada é liberada para o SO.

Page 28: Desenvolvendo para iOS

28

Reference CountingExemplo:NSString *str = [[NSString alloc] init];

+1

ou

NSString *str = [[NSString new];+1

NSString *str2 = str;+1

[str release];-1

[str2 release]; -1

Page 29: Desenvolvendo para iOS

29

Autorelease

• Também conhecido como Convenience Method

• São objetos cujo “dono não é você”. Tem o release feito automaticamente após um tempo.

Page 30: Desenvolvendo para iOS

30

AutoreleaseConvenience Method

NSString *str [NSString format:@”%d”, 2];

[str autorelease];NSLog(str);

Uma vez dado o autorelease não é mais possível fazer release.

Page 31: Desenvolvendo para iOS

31

DeallocMuitas vezes os valores das propriedades ficam retidos devido ao uso da diretiva @property. No método dealoc liberamos a memória.

- (void) dealoc {[self.name release];[super dealloc];

}

O dealoc é sempre chamado quando a contagem de referências chegar a zero.

Page 32: Desenvolvendo para iOS

Desenvolvendo para iOS

Cesar Müzel Gonçalves Filho