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

Preview:

DESCRIPTION

Slides da apresentação na Mobile Conf Rio 2013.

Citation preview

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

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?

Obrigado!@fabiopimentel