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

Desenvolvendo para iOS

Dec 05, 2014

Download

Technology

by Cesar Müzel G. Filho
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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