O que você precisa para começar no iOS e
Objective-C
@fabiopimentel
* Desenvolvedor Java, Ruby, Android e iOS* Instrutor Java, Ruby, Android e iOS* github.com/fabiopimentel
Quem sou eu?
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)
http://virtualschool.edu/cox/
Brad Cox
1986
História
76
História
76 85
Ainda em 85 ...
Next ComputerSistema Operacional NextStep
Next ComputerSistema Operacional NextStep
Unix Like (Unix BSD)Conceito de Dock
Next ComputerSistema Operacional NextStep
Unix Like (Unix BSD)Origem do Dock
Conceitos de GUI
Next ComputerSistema Operacional NextStep
Unix Like (Unix BSD)Origem do Dock
Conceitos de GUIPrimeiro navegador web
Next ComputerSistema Operacional NextStep
Unix Like (Unix BSD)Origem do Dock
Conceitos de GUIPrimeiro 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
Interface Builder
e junto comigo ....
XCode
Show me the code!!!
Declaração de classes
Declaração de classes
Header File (.h) -> Declaração
Implementation File (.m) -> Implementação
Declaração de classes
#import <Foundation/Foundation.h>@interface Carro
@end
Carro.h
Declaração de classes
#import <Foundation/Foundation.h>@interface Carro : NSObject
@end
Carro.h supertipo
Declaração de classes
#import <Foundation/Foundation.h>@interface Carro : NSObject{
NSString * modelo;int ano;
}
@end
Carro.h
atributos
Declaração de classes
#import <Foundation/Foundation.h>@interface Carro : NSObject{
NSString * modelo;int ano;
}
@end
Carro.h
atributos
@private(default)@protected@public
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 -> +
- (void) acelera;
- (void) pintaCarro : (Carro *) carro;
nome do parâmetro
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 :
ainda nome do método
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 *);
tipo do parâmetro
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;
nome do parâmetro
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
#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.h
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
#import “Carro.h”@implementation Carro
-(void) setModelo: (NSString *) modelo{
self.modelo = modelo;}
@end
Carro.m
Declaração de classes
#import “Carro.h”@implementation Carro
-(void) setModelo: (NSString *) modelo{
self.modelo = modelo;}-(NSString *) modelo{
return modelo;}
@end
Carro.m
Declaração de classes#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
Carro.m
Declaração de classes
Mas tem um CTRL +3
Generate Getters and Setters ?
#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
Carro.m
Declaração de classes#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
Carro.m
Quase isso!!!
Vamos voltar ....
Declaração de classes
#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.h#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
Carro.m
Declaração de classesCarro.h
#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
Carro.m
#import <Foundation/Foundation.h>@interface Carro : NSObject
@property NSString * modelo;@property int ano;
@end
Mais sobre propriedades...
@property ( nonatomic, strong ) NSString * modelo;
atomic weak
assing
xxx
Mais sobre propriedades...
@property ( nonatomic, strong ) NSString * modelo;
atomic weak
assing
xxx
Acesso concorrente(Threads)
Mais sobre propriedades...
@property ( nonatomic, strong ) NSString * modelo;
atomic weak
assign
xxx
Gerenciamento de memória
Mais sobre propriedades...
@property ( nonatomic, strong ) NSString * modelo;
atomic weak
assign
xxx
Gerenciamento de memória
Declaração de classesCarro.h
#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
Carro.m
#import <Foundation/Foundation.h>@interface Carro : NSObject
@property NSString * modelo;@property int ano;
@end
Declaração de classes
#import <Foundation/Foundation.h>@interface Carro : NSObject
@property NSString * modelo;@property int ano;
@end
Carro.h
#import “Carro.h”@implementation Carro
@synthesize modelo, ano;@end
Carro.m
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 objetosCarro * carro = [[Carro alloc] init];
[carro setModelo: @”Fusca”];
Chamada de método! []
Usando objetosCarro * carro = [[Carro alloc] init];
[carro setModelo: @”Fusca”];NSString * modelo = [carro modelo];
método get
MUITA ATENÇÃO!!!!!!!
MUITA ATENÇÃO!!!!!!!
Existe Dot
Notation
MUITA ATENÇÃO!!!!!!!
Apenas para
propriedad
es!!!
Usando objetosCarro * carro = [[Carro alloc] init];
carro.modelo = @“Fusca”;
é um Syntax Sugar para[carro setModelo: @”Fusca”];
Usando objetosCarro * carro = [[Carro alloc] init];
carro.modelo = @“Fusca”;
é um Syntax Sugar para[carro modelo];
NSString * modelo = carro.modelo;
....
- (void) acelera;
...
Carro.h
Usando objetosCarro * carro = [[Carro alloc] init];
carro.modelo = @“Fusca”;NSString * modelo = carro.modelo;
carro.acelera
Usando objetosCarro * carro = [[Carro alloc] init];
carro.modelo = @“Fusca”;NSString * modelo = carro.modelo;
carro.acelera
Usando objetosCarro * carro = [[Carro alloc] init];
carro.modelo = @“Fusca”;NSString * modelo = carro.modelo;
[carro acelera];
Usando objetosCarro * carro = [[Carro alloc] init];
carro.modelo = @“Fusca”;NSString * modelo = carro.modelo;
[carro acelera];
....
- (void) pintaCarro : (Carro *) carro comCor : (NSString *) cor;
...
Oficina.h
Usando objetos
Carro * carro = [[Carro alloc] init];[carro setModelo: @”Fusca”];[carro setAno: 1969];
Oficina * oficina =[[Oficina alloc]init][oficina pintaCarro: carro comCor: @”Azul”]
- (void) pintaCarro : (Carro *) carro comCor : (NSString *) cor;
Oficina.h
Usando objetos
Carro * carro = [[Carro alloc] init];[carro setModelo: @”Fusca”];[carro setAno: 1969];
Oficina * oficina =[[Oficina alloc]init][oficina pintaCarro: carro comCor: @”Azul”]
- (void) pintaCarro : (Carro *) carro comCor : (NSString *) cor;
Oficina.h
O nome do método é:pintaCarro:comCor:
iOS
//desde 2007 uma versão por ano
for(int ano = 2007, versao =1; ano < 2013; ano ++, versao ++){ NSLog(@”No ano %d foi lançado a versão %d”, ano, versao);}
C
ObjC
iOS
NSArray * devices = [NSArray arrayWithObjects: @”iPhone”, @”iPad”, @”iPod Touch”, @”Apple TV”, nil ];
int quantidade = [devices count ];NSLog(@”%d”, quantidade);
//devices que rodam sobre o iOSclasse
método de classe
[]
método de instância
[ ]
iOS MVC
Controller
Model View
iOS MVC
Controller
Model View
------
------
-----
------
-----
iOS MVC
Controller
Model View
------
------
-----
------
-----
iOS MVC
Controller
Model View
------
------
-----
------
-----
Outlet
iOS MVC
Controller
Model View
------
------
-----
------
-----
Outlet
Action
LIVE CODE!!!
E agora?
http://www.caelum.com.br/curso-ios-iphone-ipad/
https://developer.apple.com/programs/ios/
Obrigado!@fabiopimentel
Top Related