Desenvolvendo
para iOS
Cesar Müzel Gonçalves Filho
iPhone o Celular da Apple
iPod
Telefone
Internet Steve Jobs – ex-CEO e
cofundador da Apple
2
Objective-C
3
4
5
• https://developer.apple.com/programs/ios/
• Apple ID
• Xcode
• Objective-C
6
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
Objective-C
Interface
(Cabeçalho)
Implementação
8
Interface
@interface ContaBancaria : NSObject {
float balanco;
NSString *nomeDoDono;
}
- (float) sacar:(float)quantidade;
- (void) depositar:(float)quantidade;
@end
9
Implementação
#import "ContaBancaria.h"
@implementation ContaBancaria
- (id) init {
self = [super init];
return self;
}
- (float) sacar:(float)quantidade {
// calcula quantidade a sacar
return quantidade;
}
- (void) depositar:(float)quantidade {
// somar quantidade ao valor da conta
}
@end
10
Criando Objetos
Jeito Java:
ContaBancaria conta = new ContaBancaria();
Jeito Objective-C:
ContaBancaria *conta = [[ContaBancaria alloc] init];
11
Privilégios de Acesso
@protected (padrão)
@public
@private
Exemplo:
@public NSString *nome;
12
Privilégios de Acesso
Acessar atributos das classes:
conta->numeroDaConta = 570;
conta->nomeDoDono = @”Pedro Cardoso”;
13
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
14
Mensagens
Mé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”];
15
Mensagens
Opçã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.
16
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 & SETTERS
ACCESSORS & MUTATORS
17
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
18
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 ;
}
19
Gerenciamento de memória
Propriedades e
Encapsulamento
@interface Carro {
<propriedades>
}
@property float aceleracao;
@property (retain) NSString *nomeDoDono;
@property (readonly) NSString *marca;
<métodos>
@end
20
Propriedades e
Encapsulamento
//Carro.m
...
@implementation Carro
@synthesize aceleracao;
@synthesize nomeDoDono;
@synthesize marca;
...
@end
21
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
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;
23
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];
}
24
Initializers / Construtores
Instanciar e Inicializar
Carro *mustang [[Carro alloc] initComMarca: @”Ford”];
25
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.
26
Reference Counting
R.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.
27
Reference Counting
Exemplo:
NSString *str = [[NSString alloc] init]; +1
ou
NSString *str = [[NSString new]; +1
NSString *str2 = str; +1
[str release]; -1
[str2 release]; -1
28
Autorelease
• Também conhecido como
Convenience Method
• São objetos cujo “dono não é você”.
Tem o release feito automaticamente
após um tempo.
29
Autorelease
Convenience Method
NSString *str [NSString format:@”%d”, 2];
[str autorelease];
NSLog(str);
Uma vez dado o autorelease não é mais possível fazer release.
30
Dealloc
Muitas 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.
31
Desenvolvendo
para iOS
Cesar Müzel Gonçalves Filho

Desenvolvendo para iOS