Desenvolvendo para iOS
-
Upload
cesinha-muezel-g-filho -
Category
Technology
-
view
648 -
download
1
description
Transcript of Desenvolvendo para iOS
![Page 1: Desenvolvendo para iOS](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/1.jpg)
Desenvolvendo para iOS
Cesar Müzel Gonçalves Filho
![Page 2: Desenvolvendo para iOS](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/2.jpg)
iPhone o Celular da Apple
iPod
Telefone
InternetSteve Jobs – ex-CEO e cofundador da Apple
2
![Page 3: Desenvolvendo para iOS](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/3.jpg)
Objective-C
3
![Page 4: Desenvolvendo para iOS](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/4.jpg)
4
![Page 5: Desenvolvendo para iOS](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/5.jpg)
5
![Page 6: Desenvolvendo para iOS](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/6.jpg)
• https://developer.apple.com/programs/ios/
• Apple ID
• Xcode
• Objective-C
6
![Page 7: Desenvolvendo para iOS](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/7.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/8.jpg)
Objective-C
Interface(Cabeçalho)
Implementação
8
![Page 9: Desenvolvendo para iOS](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/9.jpg)
Interface@interface ContaBancaria : NSObject {
float balanco;NSString *nomeDoDono;
}
- (float) sacar:(float)quantidade;- (void) depositar:(float)quantidade;
@end
9
![Page 10: Desenvolvendo para iOS](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/10.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/11.jpg)
Criando ObjetosJeito Java:ContaBancaria conta = new ContaBancaria();
Jeito Objective-C:ContaBancaria *conta = [[ContaBancaria alloc] init];
11
![Page 12: Desenvolvendo para iOS](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/12.jpg)
12
Privilégios de Acesso@protected (padrão)@public@private
Exemplo:@public NSString *nome;
![Page 13: Desenvolvendo para iOS](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/13.jpg)
13
Privilégios de AcessoAcessar atributos das classes:
conta->numeroDaConta = 570;conta->nomeDoDono = @”Pedro Cardoso”;
![Page 14: Desenvolvendo para iOS](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/14.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/15.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/16.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/17.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/18.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/19.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/20.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/21.jpg)
21
Propriedades e Encapsulamento
//Carro.m...@implementation Carro
@synthesize aceleracao;@synthesize nomeDoDono;@synthesize marca;
...@end
![Page 22: Desenvolvendo para iOS](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/22.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/23.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/24.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/25.jpg)
25
Initializers / Construtores
Instanciar e Inicializar
Carro *mustang [[Carro alloc] initComMarca: @”Ford”];
![Page 26: Desenvolvendo para iOS](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/26.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/27.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/28.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/29.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/30.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/31.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022081413/548301cfb079591a0c8b48ea/html5/thumbnails/32.jpg)
Desenvolvendo para iOS
Cesar Müzel Gonçalves Filho