O documento resume os principais conceitos de programação em Objective-C, incluindo diretivas, classes, instâncias, métodos, mensagens, propriedades, inicializadores, gerenciamento de memória através de reference counting e autorelease pools.
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.
4
7. Classes
Para referenciar outra classe em um arquivo é necessário importar o header.
//SomeClass.h
#import “AnotherClass.h”
@interface SomeClass : Herança
AnotherClass *anotherClass;
@end
7
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];
19
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.
20
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 & SETTERS
ACCESSORS & MUTATORS
21
23. Propriedades / Encapsulamento
//SomeClass.m Para tornar as propriedades
- (float) rate{ Readonly, remover os métodos set
return rate;
}
- (void) setRate: (float) value{
rate = value;
}
- (NSString *) name{
return name;
}
- (void) setName: (NSString *) value{
[value retain];
Gerenciamento de memória
[name release];
name = value;
}
23
24. Propriedades / Encapsulamento
//SomeClass.h O @property gera automaticamente
os acessors e mutattors
<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
24
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.
32
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.
33
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.
35
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.
36
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.
37
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];
38
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.
39