SlideShare une entreprise Scribd logo
1  sur  102
Télécharger pour lire hors ligne
O que você precisa para
começar no iOS e
Objective-C
Quem sou eu?
@fabiopimentel
* Desenvolvedor Java, Ruby, Android e iOS
* Instrutor Java, Ruby, Android e iOS
* github.com/fabiopimentel
Por que uma palestra para
iniciante?
* Objective-C?
* Difícil de começar? Novidade(2007)!
* Alta procura por desenvolvedores
mobile no Brasil
Porque desenvolver para
iOS?
“At Apple’s Worldwide Developer’s Conference in San Francisco today,
Apple CEO Tim Cook revealed that since 2008, Apple has paid out
developers $10 billion for their apps.”
WWDC Jun/2013
http:/
/www.forbes.com/sites/tristanlouis/2013/08/10/how-much-do-average-apps-make/
http:/
/www.forbes.com/sites/tristanlouis/2013/08/10/how-much-do-average-apps-make/
O que você precisa?
Lógica de programação
Conhecimentos de Orientação de Objetos
Saber pesquisar no Stack Overflow, Google
E agora?

XCode
Mas eu não tenho Mac!
Vamos programar?
Objective-C (OFICIAL)
Ruby - RubyMotion

C# - Xamarin
Objective-C
C (1972)
C++
(1985)

ObjC
(1986)

Smalltalk
(1980)
Objective-C
C (1972)
C++
(1985)

ObjC
(1986)

Smalltalk
(1980)
Brad Cox

http://virtualschool.edu/cox/

1986
História
76
História
76

85
Ainda em 85 ...
Next Computer
Sistema Operacional NextStep
Next Computer
Sistema Operacional NextStep
Unix Like (Unix BSD)
Conceito de Dock
Next Computer
Sistema Operacional NextStep
Unix Like (Unix BSD)
Origem do Dock
Conceitos de GUI
Next Computer
Sistema Operacional NextStep
Unix Like (Unix BSD)
Origem do Dock
Conceitos de GUI
Primeiro navegador web
Next Computer
Sistema Operacional NextStep
Unix Like (Unix BSD)
Origem do Dock
Conceitos de GUI
Primeiro navegador web
Objective-C como linguagem
História
76

85

86
História
76

85

86

96
e junto comigo ....

Project Builder
Project Builder

XCode
e junto comigo ....

Interface
Builder

XCode
Sho
wm
co d e the
e! ! !
Declaração de classes
Declaração de classes
Header File (.h) -> Declaração
Implementation File (.m) -> Implementação
Declaração de classes
Carro.h
#import <Foundation/Foundation.h>
@interface Carro

@end
Declaração de classes
Carro.h

supertipo

#import <Foundation/Foundation.h>
@interface Carro : NSObject

@end
Declaração de classes
Carro.h
#import <Foundation/Foundation.h>
@interface Carro : NSObject
{
atributos
NSString * modelo;
int ano;
}
@end
Declaração de classes
Carro.h
#import <Foundation/Foundation.h>
@interface Carro : NSObject
{
atributos
NSString * modelo;
int ano;
@private(default)
}
@protected
@public
@end
Declaração de métodos
Declaração de métodos
Método de instância ->
Método de classe ->

+

-
Declaração de métodos
Método de instância ->
Método de classe ->

- (void)
retorno

+

-
Declaração de métodos
Método de instância ->
Método de classe ->

-

+

- (void) acelera;
nome
Declaração de métodos
Método de instância ->
Método de classe ->

- (void) acelera;
- (void) pintaCarro :
recebe parâmetro

+

-
Declaração de métodos
Método de instância ->
Método de classe ->

-

+

- (void) acelera;
- (void) pintaCarro : (Carro *)
tipo do parâmetro
Declaração de métodos
Método de instância ->
Método de classe ->

+

nome do parâmetro

- (void) acelera;
- (void) pintaCarro : (Carro *) carro;
Declaração de métodos
Método de instância ->
Método de classe ->
- (void) acelera;

-

+
ainda nome do método

- (void) pintaCarro : (Carro *) carro;
- (void) pintaCarro : (Carro *) carro comCor :
Declaração de métodos
Método de instância ->
Método de classe ->

-

+

- (void) acelera;

tipo do parâmetro

- (void) pintaCarro : (Carro *) carro;
- (void) pintaCarro : (Carro *) carro comCor : (NSString *);
Declaração de métodos
Método de instância ->
Método de classe ->

-

+

- (void) acelera;

nome do parâmetro

- (void) pintaCarro : (Carro *) carro;
- (void) pintaCarro : (Carro *) carro comCor : (NSString *) cor;
Declaração de métodos
Método de instância ->
Método de classe ->

-

+

- (void) acelera;
- (void) pintaCarro : (Carro *) carro;
- (void) pintaCarro : (Carro *) carro comCor : (NSString *) cor;
Declaração de classes
Carro.h
#import <Foundation/Foundation.h>
@interface Carro : NSObject
{
NSString * modelo;
int ano;
}
-(void) setModelo : (NSString *) modelo;
-(NSString *) modelo;
-(void) setAno : (int) ano;
-(int) ano;

@end
Mas o que os métodos
fazem?
São dois arquivos,
lembra?
Header File (.h) -> Declaração
Implementation File (.m) -> Implementação
São dois arquivos
lembra?
Header File (.h) -> Declaração OK
Implementation File (.m) -> Implementação
Declaração de classes
Carro.m
#import “Carro.h”
@implementation Carro
-(void) setModelo: (NSString *) modelo
{
self.modelo = modelo;
}

@end
Declaração de classes
Carro.m
#import “Carro.h”
@implementation Carro
-(void) setModelo: (NSString *) modelo
{
self.modelo = modelo;
}
-(NSString *) modelo
{
return modelo;
}

@end
Declaração de classes
Carro.m

#import “Carro.h”
@implementation Carro
-(void) setModelo: (NSString *) modelo
{
self.modelo = modelo;
}
-(NSString *) modelo
{
return modelo;
}
-(void) setAno: (int) ano
{
self.ano = ano;
}
-(int) ano
{
return ano;
}

@end
Declaração de classes
Carro.m

#import “Carro.h”
@implementation Carro
-(void) setModelo: (NSString *) modelo
{
self.modelo = modelo;
}
-(NSString *) modelo
{
return modelo;
}
-(void) setAno: (int) ano
{
self.ano = ano;
}
-(int) ano
{
return ano;
}

@end

Mas tem um
CTRL +3
Generate Getters and
Setters ?
Declaração de classes
Carro.m

#import “Carro.h”
@implementation Carro
-(void) setModelo: (NSString *) modelo
{
self.modelo = modelo;
}
-(NSString *) modelo
{
return modelo;
}
-(void) setAno: (int) ano
{
self.ano = ano;
}
-(int) ano
{
return ano;
}

@end

Quase isso!!!
Vamos voltar ....
Declaração de classes
Carro.h
#import <Foundation/Foundation.h>
@interface Carro : NSObject
{
NSString * modelo;
int ano;
}
-(void) setModelo : (NSString *) modelo;
-(NSString *) modelo;
-(void) setAno : (int) ano;
-(int) ano;

@end

Carro.m
#import “Carro.h”
@implementation Carro
-(void) setModelo: (NSString *) modelo
{
self.modelo = modelo;
}
-(NSString *) modelo
{
return modelo;
}
-(void) setAno: (int) ano
{
self.ano = ano;
}
-(int) ano
{
return ano;
}

@end
Declaração de classes
Carro.h

Carro.m
#import “Carro.h”
@implementation Carro

#import <Foundation/Foundation.h>
@interface Carro : NSObject

@property NSString * modelo;
@property int ano;
@end

-(void) setModelo: (NSString *) modelo
{
self.modelo = modelo;
}
-(NSString *) modelo
{
return modelo;
}
-(void) setAno: (int) ano
{
self.ano = ano;
}
-(int) ano
{
return ano;
}

@end
Mais sobre propriedades...
@property ( nonatomic, strong ) NSString * modelo;

x

atomic

x

weak

x

assing
Mais sobre propriedades...
@property ( nonatomic, strong ) NSString * modelo;

x

x

weak

atomic

x

assing

Acesso concorrente
(Threads)
Mais sobre propriedades...
@property ( nonatomic, strong ) NSString * modelo;

x

atomic

x

weak

x

assign

Gerenciamento de
memória
Mais sobre propriedades...
@property ( nonatomic, strong ) NSString * modelo;

x

atomic

x

weak

x

assign

Gerenciamento de
memória
Declaração de classes
Carro.h

Carro.m
#import “Carro.h”
@implementation Carro

#import <Foundation/Foundation.h>
@interface Carro : NSObject

@property NSString * modelo;
@property int ano;
@end

-(void) setModelo: (NSString *) modelo
{
self.modelo = modelo;
}
-(NSString *) modelo
{
return modelo;
}
-(void) setAno: (int) ano
{
self.ano = ano;
}
-(int) ano
{
return ano;
}

@end
Declaração de classes
Carro.m

Carro.h
#import <Foundation/Foundation.h>
@interface Carro : NSObject

#import “Carro.h”
@implementation Carro

@property NSString * modelo;
@property int ano;

@synthesize modelo, ano;
@end

@end
Criando objetos
Carro alloc

Método de classe (+)
Criando objetos
[Carro alloc]

Chamada de
método entre
colchetes
Criando objetos
[Carro alloc] init

Método de instância (-)
Criando objetos
[[Carro alloc] init]

Chamada de
método entre
colchetes
Criando objetos
Carro * carro = [[Carro alloc] init];

Referência
Usando objetos
Carro * carro = [[Carro alloc] init];
[carro setModelo: @”Fusca”];

Chamada de
método! []
Usando objetos
Carro * carro = [[Carro alloc] init];
[carro setModelo: @”Fusca”];
NSString * modelo = [carro modelo];

método get
MUITA ATENÇÃO!!!!!!!
MUITA ATENÇÃO!!!!!!!

ot
D
te
is
Ex
on
ti
ta
o
N
MUITA ATENÇÃO!!!!!!!

ra
pa
as
n
!!
e
s!
p
A
de
a
ed
ri
op
pr
Usando objetos
Carro * carro = [[Carro alloc] init];
carro.modelo = @“Fusca”;
é um Syntax Sugar para
[carro setModelo: @”Fusca”];
Usando objetos
Carro * carro = [[Carro alloc] init];
carro.modelo = @“Fusca”;
NSString * modelo = carro.modelo;
é um Syntax Sugar para
[carro modelo];
Carro.h
....
- (void) acelera;
...
Usando objetos
Carro * carro = [[Carro alloc] init];
carro.modelo = @“Fusca”;
NSString * modelo = carro.modelo;
carro.acelera
Usando objetos
Carro * carro = [[Carro alloc] init];
carro.modelo = @“Fusca”;
NSString * modelo = carro.modelo;
carro.acelera
Usando objetos
Carro * carro = [[Carro alloc] init];
carro.modelo = @“Fusca”;
NSString * modelo = carro.modelo;
[carro acelera];
Usando objetos
Carro * carro = [[Carro alloc] init];
carro.modelo = @“Fusca”;
NSString * modelo = carro.modelo;
[carro acelera];
Oficina.h
....
- (void) pintaCarro : (Carro *) carro comCor : (NSString *) cor;
...
Oficina.h

Usando objetos

- (void) pintaCarro : (Carro *) carro comCor : (NSString *) cor;

Carro * carro = [[Carro alloc] init];
[carro setModelo: @”Fusca”];
[carro setAno: 1969];
Oficina * oficina =[[Oficina alloc]init]
[oficina pintaCarro: carro comCor: @”Azul”]
Oficina.h

Usando objetos

- (void) pintaCarro : (Carro *) carro comCor : (NSString *) cor;

Carro * carro = [[Carro alloc] init];
[carro setModelo: @”Fusca”];
[carro setAno: 1969];

O nome do método é:
pintaCarro:comCor:

Oficina * oficina =[[Oficina alloc]init]
[oficina pintaCarro: carro comCor: @”Azul”]
iOS
//desde 2007 uma versão por ano

C
for(int ano = 2007, versao =1; ano < 2013; ano ++, versao ++){
NSLog(@”No ano %d foi lançado a versão %d”, ano, versao);
}

ObjC
iOS
classe
//devices que rodam sobre o iOS
NSArray * devices = [
[NSArray arrayWithObjects: @”iPhone”,
@”iPad”, @”iPod Touch”, @”Apple TV”, nil ]
];
int quantidade = [
[devices count ]
];
NSLog(@”%d”, quantidade);
    

método de instância

método de
classe
iOS MVC
Controller

Model

View
iOS MVC
Controller

--

---

---

--Model

--

---

---

---

View
iOS MVC
Controller

--

---

---

--Model

--

---

---

---

View
iOS MVC
Controller

--

---

---

--Model

Outlet ----

---

---

View
iOS MVC
Controller

--

---

---

--Model

-Outlet ----

Action
---View
LIVE CODE!!!
E agora?
http:/
/www.caelum.com.br/curso-ios-iphone-ipad/
https:/
/developer.apple.com/programs/ios/
Obrigado!
@fabiopimentel

Contenu connexe

Similaire à O que você precisa para iniciar no iOS e Objective-C -

Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOWesley Lemos
 
[Curso Java Basico - Orientacao a Objetos] Aula 32: Encapsulamento: métodos g...
[Curso Java Basico - Orientacao a Objetos] Aula 32: Encapsulamento: métodos g...[Curso Java Basico - Orientacao a Objetos] Aula 32: Encapsulamento: métodos g...
[Curso Java Basico - Orientacao a Objetos] Aula 32: Encapsulamento: métodos g...Loiane Groner
 
[Curso Java Basico - Orientacao a Objetos] Aula 30: Palavra chave this
[Curso Java Basico - Orientacao a Objetos] Aula 30: Palavra chave this[Curso Java Basico - Orientacao a Objetos] Aula 30: Palavra chave this
[Curso Java Basico - Orientacao a Objetos] Aula 30: Palavra chave thisLoiane Groner
 
Pensando ao contrário - Por que você deveria considerar Rails no seu próximo ...
Pensando ao contrário - Por que você deveria considerar Rails no seu próximo ...Pensando ao contrário - Por que você deveria considerar Rails no seu próximo ...
Pensando ao contrário - Por que você deveria considerar Rails no seu próximo ...andersonleite
 
Aula 1 view model livedata e databinding.pptx
Aula 1   view model livedata e databinding.pptxAula 1   view model livedata e databinding.pptx
Aula 1 view model livedata e databinding.pptxRicardo Ogliari
 
Melhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQueryMelhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQueryHarlley Oliveira
 
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”Rogério Moraes de Carvalho
 
Lib.SAPO.JS - Codebits2007
Lib.SAPO.JS  - Codebits2007Lib.SAPO.JS  - Codebits2007
Lib.SAPO.JS - Codebits2007Claudio Gamboa
 
Introdução à programação em Android e iOS - OOP em ObjC
Introdução à programação em Android e iOS - OOP em ObjCIntrodução à programação em Android e iOS - OOP em ObjC
Introdução à programação em Android e iOS - OOP em ObjCLuís Gustavo Martins
 
Html5 storage api
Html5 storage apiHtml5 storage api
Html5 storage apiSuissa
 
Exercicios professor marcos monteiro (1)
Exercicios professor marcos monteiro (1)Exercicios professor marcos monteiro (1)
Exercicios professor marcos monteiro (1)jose-junior89
 
Sessao 1 apresentacao
Sessao 1   apresentacaoSessao 1   apresentacao
Sessao 1 apresentacaoclaudiaasousa
 
Aop Aspect J 1.5.4 Capitulo 02
Aop Aspect J 1.5.4 Capitulo 02Aop Aspect J 1.5.4 Capitulo 02
Aop Aspect J 1.5.4 Capitulo 02Diego Pacheco
 
[Curso Java Basico - Orientacao a Objetos] Aula 25: Classes e metodos simples
[Curso Java Basico - Orientacao a Objetos] Aula 25: Classes e metodos simples[Curso Java Basico - Orientacao a Objetos] Aula 25: Classes e metodos simples
[Curso Java Basico - Orientacao a Objetos] Aula 25: Classes e metodos simplesLoiane Groner
 

Similaire à O que você precisa para iniciar no iOS e Objective-C - (20)

OOP ObjC
OOP ObjCOOP ObjC
OOP ObjC
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POO
 
[Curso Java Basico - Orientacao a Objetos] Aula 32: Encapsulamento: métodos g...
[Curso Java Basico - Orientacao a Objetos] Aula 32: Encapsulamento: métodos g...[Curso Java Basico - Orientacao a Objetos] Aula 32: Encapsulamento: métodos g...
[Curso Java Basico - Orientacao a Objetos] Aula 32: Encapsulamento: métodos g...
 
[Curso Java Basico - Orientacao a Objetos] Aula 30: Palavra chave this
[Curso Java Basico - Orientacao a Objetos] Aula 30: Palavra chave this[Curso Java Basico - Orientacao a Objetos] Aula 30: Palavra chave this
[Curso Java Basico - Orientacao a Objetos] Aula 30: Palavra chave this
 
Pensando ao contrário - Por que você deveria considerar Rails no seu próximo ...
Pensando ao contrário - Por que você deveria considerar Rails no seu próximo ...Pensando ao contrário - Por que você deveria considerar Rails no seu próximo ...
Pensando ao contrário - Por que você deveria considerar Rails no seu próximo ...
 
Aula 1 view model livedata e databinding.pptx
Aula 1   view model livedata e databinding.pptxAula 1   view model livedata e databinding.pptx
Aula 1 view model livedata e databinding.pptx
 
Os3
Os3Os3
Os3
 
Melhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQueryMelhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQuery
 
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”
 
Lib.SAPO.JS - Codebits2007
Lib.SAPO.JS  - Codebits2007Lib.SAPO.JS  - Codebits2007
Lib.SAPO.JS - Codebits2007
 
OOP Java
OOP JavaOOP Java
OOP Java
 
Introdução à programação em Android e iOS - OOP em ObjC
Introdução à programação em Android e iOS - OOP em ObjCIntrodução à programação em Android e iOS - OOP em ObjC
Introdução à programação em Android e iOS - OOP em ObjC
 
Html5 storage api
Html5 storage apiHtml5 storage api
Html5 storage api
 
Clean code
Clean codeClean code
Clean code
 
Exercicios professor marcos monteiro (1)
Exercicios professor marcos monteiro (1)Exercicios professor marcos monteiro (1)
Exercicios professor marcos monteiro (1)
 
Kotlin first
Kotlin firstKotlin first
Kotlin first
 
Sessao 1 apresentacao
Sessao 1   apresentacaoSessao 1   apresentacao
Sessao 1 apresentacao
 
Pilha e Fila Estática
Pilha e Fila EstáticaPilha e Fila Estática
Pilha e Fila Estática
 
Aop Aspect J 1.5.4 Capitulo 02
Aop Aspect J 1.5.4 Capitulo 02Aop Aspect J 1.5.4 Capitulo 02
Aop Aspect J 1.5.4 Capitulo 02
 
[Curso Java Basico - Orientacao a Objetos] Aula 25: Classes e metodos simples
[Curso Java Basico - Orientacao a Objetos] Aula 25: Classes e metodos simples[Curso Java Basico - Orientacao a Objetos] Aula 25: Classes e metodos simples
[Curso Java Basico - Orientacao a Objetos] Aula 25: Classes e metodos simples
 

O que você precisa para iniciar no iOS e Objective-C -