Objective-C

40
e-C Ob tive-C Objective-C O ve-C Objective-C Objective-C Ob ive-C Objective-C Objective-C Object ive-C Objective-C Objective-C Objective-C jective-C Objective-C Obje ctive-C Objectiv tive-C Objective-C Objective-C Objective-C bjective-C Objective-C Objective-C Objecti ctive-C Objective-C Objective-C Objective- Objective-C Objective-C Objective-C Object ective-C Obje ctive-C Objective-C Objective Objective-C Objective-C Objective-C Objec bjective-C Objective-C Objective-C Objectiv Objective-C Objective-C Objective-C Obje tive-C Objective-C Objective-C Objecti Objectiv e-C

description

Guia de consulta para o desenvolvimento com a liguagem Objective-C

Transcript of Objective-C

Page 1: Objective-C

Objective-C Objective-CObjective-C

Objective-C

Objective-CObjective-C

Objective-C Objective-C

Objective-CObjective-C

Objective-CObjective-C

Objective-C Objective-C Objective-C Objective-C

Objective-C Objective-C Objective-C Objective-C

Objective-C Objective-C Objective-C Objective-C

Objective-C Objective-C Objective-C Objective-C

Objective-C Objective-C Objective-C Objective-C

Objective-C Objective-C Objective-C Objective-C

Objective-C Objective-C Objective-C Objective-C

Objective-C Objective-C Objective-C Objective-C

Objective-C Objective-C Objective-C Objective-C

Objective-C Objective-C Objective-C Objective-C

Objective-C Objective-C Objective-C Objective-C

Objective-C Objective-C Objective-C Objective-C

Objective-C

Page 2: Objective-C

Sumário1. Introdução...........................................................................................032. Diretivas..............................................................................................043. Classes.................................................................................................054. Instâncias............................................................................................105. Fields...................................................................................................136. Privilégios de Acesso...........................................................................147. Métodos/Funções...............................................................................168. Mensagens..........................................................................................199. Propriedades/Encapsulamento..........................................................2110. Initializers / Construtores....................................................................2711. Gerenciamento de Memória..............................................................3112. Reference Counting.............................................................................3313. Autorelease.........................................................................................3514. Dealoc.................................................................................................3915. Referência ..........................................................................................40

Page 3: Objective-C

3

Introdução

.h Header Files

.m Implementation

Page 4: Objective-C

4

Diretivas

Similar ao include do C.

#import < Foundation/Foundation.h >Usado para importação de Framework

#import “SomeClass.h”Usado para importação de arquivo dentro do projeto.

Page 5: Objective-C

5

Classes

• Declarar Interface (arquivo.h)@interface SomeClass : NSObject { }

Herança

Page 6: Objective-C

6

Classes

• Implementar (arquivo.m)#import “SomeClass.h”@interface SomeClass ()@end@implemantation SomeClass

...@end

Page 7: Objective-C

7

ClassesPara referenciar outra classe em um arquivo é necessário importar o header.

//SomeClass.h#import “AnotherClass.h”@interface SomeClass : Herança

AnotherClass *anotherClass;@end

Page 8: Objective-C

8

Classes

• Errado! Compilador entra em loop

// AnotherClass.h#import “SomeClass .h”@interface AnotherClass SomeClass *someClass;@end

//SomeClass.h#import “AnotherClass.h”@interface SomeClass AnotherClass *anotherClass;

@end

Page 9: Objective-C

9

Classes

• Certo Declaração de Foward

// AnotherClass.h@class SomeClass;@interface AnotherClass SomeClass *someClass;@end

//SomeClass.h@class AnotherClass;@interface SomeClass AnotherClass *anotherClass;

@end

Page 10: Objective-C

10

Instâncias

É necessário usar o * antes do nome das variáveis. Exceto para os tipos primitivos.Ex:

int number;SomeClass *object;

Page 11: Objective-C

11

Instâncias

Aloca memória para o objeto e retorna ele para uma variável do tipo da classe.

SomeClass *someClass = [SomeClass alloc];

Page 12: Objective-C

12

Instâncias

Uma opção ao * é o idEx.:

id number;id someClass = [SomeClass alloc];

Page 13: Objective-C

13

Fields

//SomeClass.h#import <Framework>@class Another Class;@interface SomeClass{

AnotheClass *anotherClass;float rate;NSString *name;

}@end

Page 14: Objective-C

14

Privilégios de Acesso

@protected (default)@public@private

Ex.:@public NSString *name

Page 15: Objective-C

15

Privilégios de Acesso

Acessar atributos das classes:

someClass -> rate = 5someClass -> @”Wei-Meng Lee”;

Page 16: Objective-C

16

Métodos / Funções

( - ) Métodos da Instância( + ) Métodos Státicos Não precisam da classe instânciada

Page 17: Objective-C

17

Métodos / Funções

• Declaração das funções//SomeClass.h...@interface SomeClass{

<fields>}+ (void) doSomething;- (void) doThing: (NSString*) str;- (void) doThing: (NSString*) str AnotherPara: (float) value;@end

Page 18: Objective-C

18

Métodos / Funções

• Implementação dos métodos declarados

//SomeClass.m@interface SomeClass()@end@implementation SomeClass+ (void) doSomething{

<implementation...>}@end

Page 19: Objective-C

19

Mensagens

• Métodos não são chamados. Mensagens são enviadas a eles.

Ex.:[SomeClass doSomething] static method

SomeClass *object;[object doThing:@”Text”];[object doThing:@”Text” AnotherPara:9.0f];

Page 20: Objective-C

20

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.

Page 21: Objective-C

21

Propriedades / Encapsulamento

• Propriedades permitem a você expor os campos de sua classe, assim você pode controlar como os valores são definidos e retornados.

GETTERS & SETTERSACCESSORS & MUTATORS

Page 22: Objective-C

22

Propriedades / Encapsulamento

//SomeClass.h<imports>@interface SomeClass{

<fields>}

- (float) rate; get

- (void) setRate: (float) value; set

- (NSString *) name; get

- (void) setName: (NSString *) value; set

<methods>@end

Page 23: Objective-C

23

Propriedades / Encapsulamento//SomeClass.m

- (float) rate{return rate;

}- (void) setRate: (float) value{

rate = value;}- (NSString *) name{

return name;}- (void) setName: (NSString *) value{

[value retain];[name release];name = value;

}

Gerenciamento de memória

Para tornar as propriedades Readonly, remover os métodos set

Page 24: Objective-C

24

Propriedades / Encapsulamento

//SomeClass.h<imports>@interface SomeClass{

<fields>}

@property float rate;@property (retain, nonatomic) NSString *name;nonatomic = não pode ser acessado no modo thread.

@property (readonly) NSString *str;

<methods>@end

O @property gera automaticamente os acessors e mutattors

Page 25: Objective-C

25

Propriedades / Encapsulamento

//SomeClass.m...@implementation SomeClass

@synthesize rate;@synthesize name; ...@end

Page 26: Objective-C

26

Propriedades / Encapsulamento

• Acessando as properties

[obj setRate:5.0f];obj.rate = 5;

[obj setName:@”Hi”];obj.name = @”Hi”;

NSLog([sc name]);NSLog(sc.name);

Accessors

Mutators

Page 27: Objective-C

27

Initializers / Construtores

• Inicializar o objeto

SomeClass *obj = [[SomeClass alloc] init];

Page 28: Objective-C

28

Initializers / Construtores

• Para criar diversos inicializadores é necessários definir no header.

- (id) initWithName: (NSString *) n;- (id) initWithName: (NSString *) n andRate: (float) r;

Page 29: Objective-C

29

Initializers / Construtores

• Implementação- (id) initWithName: (NSString *) n andRate: (float) r {

self.name = n;self.rate = r;

return self;}

- (id) initWithName: (NSString *) n {return [self initWithName: n andRate:0.0f];

}

Page 30: Objective-C

30

Initializers / Construtores

• Instânciar e Inicializar

SomeClass *obj [[SomeClass alloc]initWithName:@”Hello”];

Page 31: Objective-C

31

GERENCIAMENTO DE MEMÓRIA

Page 32: Objective-C

32

Gerenciamento de Memória

• Garbage Colletor: Remove objetos que não estão sendo mais utilizados liberando 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 não são mais utilizados.

Page 33: Objective-C

33

Reference Counting

• R.F é um contador para cada objeto. +1 -> Quando o objeto é criado (alloc, new ou retain)

-1 -> Quando o objeto é desalocado (release)

Quando o contador chega a 0(Zero), a memória associada é liberada para o SO.

Page 34: Objective-C

34

Reference Counting

• Ex.:NSString *str = [[NSString alloc] init]; +1

ou

NSString *str = [[NSString new]; +1

NSString *str2 = str;[str2 retain]; //get ownership +1

[str release]; -1

[str2 release]; -1

Page 35: Objective-C

35

Autorelease

• Também conhecido como Convenience Method

• São objetos cujo dono não é você. Tem o release feito automaticamente após um tempo.

Page 36: Objective-C

36

Autorelease

Convenience Method

NSString *str [[NSString format:@”%d”, 2] retain];[str autorelease]; //Retira propriedade

NSLog(str); //Continua acessível

Uma vez dado o autorelease não é mais possível fazer release.

Page 37: Objective-C

37

Autorelease Pools

• Para Controlar como os Autoreleases Pool são esvaziados, ao invés de esperar o SO, você pode criar e gerenciar instâncias de pools.

Page 38: Objective-C

38

Autorelease Pools

• Os objetos str1 e str2 são criados são controlados pelo pool. Qualdo o pool é liberado os objetos também são.

NSAutoreleasePool *pool [[NSAutoreleasePool alloc] init]NSString *str1 = @”Hi”;NSString *str2 = @”Hello”;[pool release];

Page 39: Objective-C

39

Dealloc

• Muitas vezes os valores das propriedades ficam retidos devido ao uso da diretiva @property juntamente com o retain. 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 chega a zero.

Page 40: Objective-C

40

REFERÊNCIAW-M. Lee. Beginning iOS 4 application development. Wrox 2010. Appendix D, p.591-611.