Você está na página 1de 33

Desenvolvimento de Software

para Dispositivos iOS


Ambiente de Programao
Linguagem Objective-C
Ambiente de Programao

Requisitos
Computador Apple Macintosh com verso mais atual do
sistema operacional Mac OS X
ltima verso do aplicativo XCode (IDE da Apple)
O XCode inclui um ambiente de desenvolvimento
e um simulador para dispositivos iOS (entre outras
ferramentas)

Hardware Mvel (opcional)


dispositivo iOS (iPod Touch, iPhone ou iPad)
Dispositivos

Modelo RAM Processador Tela


iPhone 128M 412MHz 320x480
iPhone 3G 128M 412MHz 320x480
iPhone 3GS 256M Cortex A8 600MHz 320x480
iPhone 4 512M Apple A4 1GHz 640x960
iPhone 4S 512M Apple A5 1GHz (dual core) 640x960
iPad 256M Apple A4 1GHz 1024x768
iPad 2 512M Apple A5 1GHz (dual core) 1024x768
iPad (3 gerao) 1G Apple A5X 1GHz (quad core) 2048x1536
Objective-C

Orientada a Objetos e reflexiva.


Pode observar e modificar o
comportamento do programa em runtime.

Implementa mensagens baseadas na


linguagem Smalltalk, sobre a linguagem C.
Classes

Para os programadores com experincia em C ou C++,


a maior parte dos comandos de Objective-C so os
mesmos.

Mas em relao a classes, tudo diferente (herana


que o Objective-C carrega da linguagem SmallTalk)

A seguir apresentada a sintaxe bsica para se


trabalhar com classes e objetos em Objective-C
@interface

@interface NOME_DA_CLASSE : CLASSE_PAI


{
// declarao de variveis membro da classe
}

// declarao dos mtodos e propriedades

@end
Exemplo

@interface Ponto2D : NSObject


{
int x;
int y;
}

- (void) setX: (int) px andY: (int) py;


- (void) print;

@end
Definindo um Mtodo

nome do tipo do
tipo: nome do primeiro segundo
+- mtodo parmetro parmetro

- (void) setX: (int) px andY: (int) py ;

tipo de tipo do label nome do


retorno primeiro (opcional) segundo
parmetro parmetro
@implementation

@implementation NOME_DA_CLASSE

// implementao dos mtodos

@end
Exemplo
@implementation Ponto2D

- (void) setX: (int) px andY: (int) py


{
x = px;
y = py;
}

- (void) print
{
NSLog(@"Ponto: %d,%d",x,y);
}

@end
@property
@interface Ponto2D : NSObject
{
int x;
int y;
}

@property int x;
@property int y;

- (void) setX: (int) px andY: (int) py;


- (void) print;

@end
@synthesize
@implementation Ponto2D

@synthesize x,y;

- (void) setX: (int) px andY: (int) py


{
x = px;
y = py;
}

- (void) print
{
NSLog(@"Ponto: %d,%d",x,y);
}

@end
Criando um Objeto

Ponto2D* position = [[Ponto2D alloc] init];

ou

Ponto2D* position = [Ponto2D new];


Acessando uma Propriedade

Ponto2D* position = [[Ponto2D alloc] init];

position.x = 10;
Chamando Mtodos

Ponto2D* position = [[Ponto2D alloc] init];

[position setX:5 andY:5];


[position print];
Chamando um Mtodo
dentro da prpria Classe
@implementation Ponto2D

@synthesize x,y;

- (void) setX: (int) px andY: (int) py


{
x = px;
y = py;

[self print];
}
- (void) print
{
NSLog(@"Ponto: %d,%d",x,y);
}
@end
Mensagens para Nil

Ponto2D* position = nil;

[position print];
Inicializando Objetos

Relembrando o exemplo anterior da classe Ponto2D:

Em que ponto da classe eu poderia inicializar as


variveis x e y com um valor padro?

Resposta: em um mtodo init


Exemplo
- (Ponto2D*) init
{
self = [super init];

if(self)
{
x = 0;
y = 0;
}

return self;
}
Estruturas de Dados em Objective-c

Objective-C no fornece nenhuma classe para armazenar


dados em memria, somente os tipos bsica de array
encontrados na linguagem C.

Quem fornece uma srie de classes com esse objetivo


a prpria Apple, na biblioteca Foundation.

Objective-C 2.0 suporta tambm Fast Enumeration,


como pode ser visto no exemplo a seguir:
Exemplo

NSArray* vetor = [NSArray


arrayWithObjects:@"001",@"002",nil];

for(NSString* val in vetor)


{
NSLog(@"%@",val);
}
Categorias

Uma categoria uma forma simples e rpida de adicionar


ou substituir mtodos em uma classe que j existe.

Esses mtodos so organizados em grupos, as chamadas


categorias.

S possvel adicionar ou substituir mtodos, no


variveis. Se for necessrio a adio de novas variveis
deve-se utilizar o recurso de herana
Forma Geral

@interface CLASSE_EXISTENTE
(NOME_CATEGORIA)

... DECLARAO DOS MTODOS ...

@end
Forma Geral

@implementation CLASSE_EXISTENTE
(NOME_CATEGORIA)

... IMPLEMENTAO DOS MTODOS ...

@end
Exemplo

@interface NSString (Fun_NSString)

- (NSString*) hackerCase;

@end
Exemplo
#import "Fun+NSString.h"

@implementation NSString (Fun_NSString)

- (NSString*) hackerCase
{
NSMutableString* temp = [[NSMutableString new] autorelease];
for(int i = 0; i < [self length]; i++)
{
unichar letra = [self characterAtIndex:i];
if(i%2) letra = tolower(letra);
else letra = toupper(letra);
[temp insertString:[NSString stringWithCharacters:&letra length:1]
atIndex:[temp length]];
}
return temp;
}
@end
Perigos no uso de Categorias

O uso de categorias para substituir mtodos de outras


classes considerado deselegante

importante destacar que o contedo do mtodo


substitudo perdido, no podendo ser chamado como
ocorreria com o uso de herana (caso o mtodo fosse
sobrescrito)

O nome da categoria deve ser nico. comum ocorrer


colises quando se utilizam bibliotecas de terceiros
Protocolos

Um protocolo uma lista de mtodos


compartilhados por diversas classes.

Os mtodos de um protocolo no
possuem uma implementao, e devem
ser implementados por quem adota o
protocolo.
Forma Geral
@protocol NOME_DO_PROTOCOLO

... DECLARAO DO MTODOS OBRIGATRIOS ...

@optional

... DECLARAO DO MTODOS OPCIONAIS ...

@end
Forma Geral

@interface NOME_DA_CLASSE : CLASSE_PAI


<NOME_DO_PROTOCOLO>
{
...
}

...

@end
Exemplo
@interface Ponto2D : NSObject <NSCoding>
{
int x;
int y;
}

@property int x;
@property int y;

- (void) setX: (int) px andY: (int) py;


- (void) print;

@end
Exemplo

@implementation Ponto2D

...

- (void)encodeWithCoder:(NSCoder *)encoder
{
[encoder encodeInt:x forKey:@"PX"];
[encoder encodeInt:y forKey:@"PY"];
}

@end
Exemplo

Ponto2D* pt = [Ponto2D new];


[pt setX:10 andY:10];

NSString *archivePath = [NSHomeDirectory()

stringByAppendingPathComponent:@"Teste.archive"];
[NSKeyedArchiver archiveRootObject:pt toFile:archivePath];

Você também pode gostar