Objective-C
description
Transcript of 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
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
3
Introdução
.h Header Files
.m Implementation
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.
5
Classes
• Declarar Interface (arquivo.h)@interface SomeClass : NSObject { }
Herança
6
Classes
• Implementar (arquivo.m)#import “SomeClass.h”@interface SomeClass ()@end@implemantation SomeClass
...@end
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
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
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
10
Instâncias
É necessário usar o * antes do nome das variáveis. Exceto para os tipos primitivos.Ex:
int number;SomeClass *object;
11
Instâncias
Aloca memória para o objeto e retorna ele para uma variável do tipo da classe.
SomeClass *someClass = [SomeClass alloc];
12
Instâncias
Uma opção ao * é o idEx.:
id number;id someClass = [SomeClass alloc];
13
Fields
//SomeClass.h#import <Framework>@class Another Class;@interface SomeClass{
AnotheClass *anotherClass;float rate;NSString *name;
}@end
14
Privilégios de Acesso
@protected (default)@public@private
Ex.:@public NSString *name
15
Privilégios de Acesso
Acessar atributos das classes:
someClass -> rate = 5someClass -> @”Wei-Meng Lee”;
16
Métodos / Funções
( - ) Métodos da Instância( + ) Métodos Státicos Não precisam da classe instânciada
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
18
Métodos / Funções
• Implementação dos métodos declarados
//SomeClass.m@interface SomeClass()@end@implementation SomeClass+ (void) doSomething{
<implementation...>}@end
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];
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.
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
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
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
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
25
Propriedades / Encapsulamento
//SomeClass.m...@implementation SomeClass
@synthesize rate;@synthesize name; ...@end
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
27
Initializers / Construtores
• Inicializar o objeto
SomeClass *obj = [[SomeClass alloc] init];
28
Initializers / Construtores
• Para criar diversos inicializadores é necessários definir no header.
- (id) initWithName: (NSString *) n;- (id) initWithName: (NSString *) n andRate: (float) r;
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];
}
30
Initializers / Construtores
• Instânciar e Inicializar
SomeClass *obj [[SomeClass alloc]initWithName:@”Hello”];
31
GERENCIAMENTO DE MEMÓRIA
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.
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.
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
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.
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.
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.
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];
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.
40
REFERÊNCIAW-M. Lee. Beginning iOS 4 application development. Wrox 2010. Appendix D, p.591-611.