SlideShare une entreprise Scribd logo
1  sur  32
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

Contenu connexe

En vedette

Repaso del lenguaje
Repaso del lenguajeRepaso del lenguaje
Repaso del lenguajeg_torrealba
 
Nuevo presentación de microsoft power point
Nuevo presentación de microsoft power pointNuevo presentación de microsoft power point
Nuevo presentación de microsoft power point66racosta
 
Poema para Mães
Poema para MãesPoema para Mães
Poema para MãesSeduc MT
 
01 tallerdefrutas
01 tallerdefrutas01 tallerdefrutas
01 tallerdefrutasCENMA Salud
 
Experiencias de enseñanzas
Experiencias de enseñanzasExperiencias de enseñanzas
Experiencias de enseñanzasLORENAYULI
 
3o teste de_l.p._7o_ano_-_o_cavaleiro_da_dinamarca
3o teste de_l.p._7o_ano_-_o_cavaleiro_da_dinamarca3o teste de_l.p._7o_ano_-_o_cavaleiro_da_dinamarca
3o teste de_l.p._7o_ano_-_o_cavaleiro_da_dinamarcaLuciana Melo
 
Colexio
ColexioColexio
Colexiotoudan
 
2011 Antal International Global PresentationespañOl
2011  Antal International  Global PresentationespañOl2011  Antal International  Global PresentationespañOl
2011 Antal International Global PresentationespañOlysitko
 
El puercoespín mimoso·
El puercoespín mimoso·El puercoespín mimoso·
El puercoespín mimoso·maaruchitta
 
Alternativas software-libre vs Privado
Alternativas software-libre vs PrivadoAlternativas software-libre vs Privado
Alternativas software-libre vs Privadogrupocisnerino
 

En vedette (20)

Repaso del lenguaje
Repaso del lenguajeRepaso del lenguaje
Repaso del lenguaje
 
Nuevo presentación de microsoft power point
Nuevo presentación de microsoft power pointNuevo presentación de microsoft power point
Nuevo presentación de microsoft power point
 
Alemania
AlemaniaAlemania
Alemania
 
5 aroma1
5 aroma15 aroma1
5 aroma1
 
El grabado
El grabado El grabado
El grabado
 
Poema para Mães
Poema para MãesPoema para Mães
Poema para Mães
 
Sesion 1
Sesion 1Sesion 1
Sesion 1
 
04. manipulando dados
04. manipulando dados04. manipulando dados
04. manipulando dados
 
01 tallerdefrutas
01 tallerdefrutas01 tallerdefrutas
01 tallerdefrutas
 
Experiencias de enseñanzas
Experiencias de enseñanzasExperiencias de enseñanzas
Experiencias de enseñanzas
 
Calidad
CalidadCalidad
Calidad
 
3o teste de_l.p._7o_ano_-_o_cavaleiro_da_dinamarca
3o teste de_l.p._7o_ano_-_o_cavaleiro_da_dinamarca3o teste de_l.p._7o_ano_-_o_cavaleiro_da_dinamarca
3o teste de_l.p._7o_ano_-_o_cavaleiro_da_dinamarca
 
CV
CVCV
CV
 
Colexio
ColexioColexio
Colexio
 
2011 Antal International Global PresentationespañOl
2011  Antal International  Global PresentationespañOl2011  Antal International  Global PresentationespañOl
2011 Antal International Global PresentationespañOl
 
Naturaleza
NaturalezaNaturaleza
Naturaleza
 
Leme santa casa
Leme santa casaLeme santa casa
Leme santa casa
 
El puercoespín mimoso·
El puercoespín mimoso·El puercoespín mimoso·
El puercoespín mimoso·
 
Amplo
AmploAmplo
Amplo
 
Alternativas software-libre vs Privado
Alternativas software-libre vs PrivadoAlternativas software-libre vs Privado
Alternativas software-libre vs Privado
 

Similaire à Desenvolvendo para iOS

Introdução ao desenvolvimento para iOS
Introdução ao desenvolvimento para iOSIntrodução ao desenvolvimento para iOS
Introdução ao desenvolvimento para iOSAndrei Rosseti
 
Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03thomasdacosta
 
Construindo portlets para IBM WebSphere Portal – Parte 2
Construindo portlets para IBM WebSphere Portal – Parte 2Construindo portlets para IBM WebSphere Portal – Parte 2
Construindo portlets para IBM WebSphere Portal – Parte 2rodrigoareis
 
Ambiente de Desenvolvimento Java usando Ant
Ambiente de Desenvolvimento Java usando AntAmbiente de Desenvolvimento Java usando Ant
Ambiente de Desenvolvimento Java usando AntDenis L Presciliano
 
Fazendo uma aplicação cliente/servidor (e algumas dicas...)
Fazendo uma aplicação cliente/servidor (e algumas dicas...)Fazendo uma aplicação cliente/servidor (e algumas dicas...)
Fazendo uma aplicação cliente/servidor (e algumas dicas...)Makoto Miyagawa
 
Aplicações móveis multi-plataforma com Titanium - Geek Night
Aplicações móveis multi-plataforma com Titanium - Geek NightAplicações móveis multi-plataforma com Titanium - Geek Night
Aplicações móveis multi-plataforma com Titanium - Geek NightEric Cavalcanti
 
A primeira app iOS (a gente não esquece)
A primeira app iOS (a gente não esquece)A primeira app iOS (a gente não esquece)
A primeira app iOS (a gente não esquece)Ricardo Valeriano
 
Minicurso Objective-C
Minicurso Objective-CMinicurso Objective-C
Minicurso Objective-CSaulo Arruda
 
Criando uma arquitetura de front-end do zero
Criando uma arquitetura de front-end do zeroCriando uma arquitetura de front-end do zero
Criando uma arquitetura de front-end do zeroEduardo Shiota Yasuda
 
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Ricardo Valeriano
 
Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Alamo Saravali
 
Desenvolvendo para iOS com Cocoa-Touch
Desenvolvendo para iOS com Cocoa-TouchDesenvolvendo para iOS com Cocoa-Touch
Desenvolvendo para iOS com Cocoa-TouchCampus Party Brasil
 
Introdução ao JBoss Fuse 6.x: criação e implantação de um serviço CXF
Introdução ao JBoss Fuse 6.x: criação e implantação de um serviço CXFIntrodução ao JBoss Fuse 6.x: criação e implantação de um serviço CXF
Introdução ao JBoss Fuse 6.x: criação e implantação de um serviço CXFRafael T. C. Soares (tuelho)
 

Similaire à Desenvolvendo para iOS (20)

Desenvolvimento iOS
Desenvolvimento iOSDesenvolvimento iOS
Desenvolvimento iOS
 
Introdução ao desenvolvimento para iOS
Introdução ao desenvolvimento para iOSIntrodução ao desenvolvimento para iOS
Introdução ao desenvolvimento para iOS
 
Kotlin first
Kotlin firstKotlin first
Kotlin first
 
OOP ObjC
OOP ObjCOOP ObjC
OOP ObjC
 
Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03
 
Construindo portlets para IBM WebSphere Portal – Parte 2
Construindo portlets para IBM WebSphere Portal – Parte 2Construindo portlets para IBM WebSphere Portal – Parte 2
Construindo portlets para IBM WebSphere Portal – Parte 2
 
IOS API
IOS APIIOS API
IOS API
 
Ambiente de Desenvolvimento Java usando Ant
Ambiente de Desenvolvimento Java usando AntAmbiente de Desenvolvimento Java usando Ant
Ambiente de Desenvolvimento Java usando Ant
 
Fazendo uma aplicação cliente/servidor (e algumas dicas...)
Fazendo uma aplicação cliente/servidor (e algumas dicas...)Fazendo uma aplicação cliente/servidor (e algumas dicas...)
Fazendo uma aplicação cliente/servidor (e algumas dicas...)
 
Aplicações móveis multi-plataforma com Titanium - Geek Night
Aplicações móveis multi-plataforma com Titanium - Geek NightAplicações móveis multi-plataforma com Titanium - Geek Night
Aplicações móveis multi-plataforma com Titanium - Geek Night
 
A primeira app iOS (a gente não esquece)
A primeira app iOS (a gente não esquece)A primeira app iOS (a gente não esquece)
A primeira app iOS (a gente não esquece)
 
Sua primeira app iOS
 Sua primeira app iOS Sua primeira app iOS
Sua primeira app iOS
 
Minicurso Objective-C
Minicurso Objective-CMinicurso Objective-C
Minicurso Objective-C
 
Criando uma arquitetura de front-end do zero
Criando uma arquitetura de front-end do zeroCriando uma arquitetura de front-end do zero
Criando uma arquitetura de front-end do zero
 
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
 
Python Para Maemo
Python Para MaemoPython Para Maemo
Python Para Maemo
 
Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Aprendendo objective c - parte 1
Aprendendo objective c - parte 1
 
Desenvolvendo para iOS com Cocoa-Touch
Desenvolvendo para iOS com Cocoa-TouchDesenvolvendo para iOS com Cocoa-Touch
Desenvolvendo para iOS com Cocoa-Touch
 
Caelum Day In Rio
Caelum Day In RioCaelum Day In Rio
Caelum Day In Rio
 
Introdução ao JBoss Fuse 6.x: criação e implantação de um serviço CXF
Introdução ao JBoss Fuse 6.x: criação e implantação de um serviço CXFIntrodução ao JBoss Fuse 6.x: criação e implantação de um serviço CXF
Introdução ao JBoss Fuse 6.x: criação e implantação de um serviço CXF
 

Desenvolvendo para iOS