SlideShare uma empresa Scribd logo
1 de 40
Objective-C
Sumário
1.    Introdução...........................................................................................03
2.    Diretivas..............................................................................................04
3.    Classes.................................................................................................05
4.    Instâncias............................................................................................10
5.    Fields...................................................................................................13
6.    Privilégios de Acesso...........................................................................14
7.    Métodos/Funções...............................................................................16
8.    Mensagens..........................................................................................19
9.    Propriedades/Encapsulamento..........................................................21
10.   Initializers / Construtores....................................................................27
11.   Gerenciamento de Memória..............................................................31
12.   Reference Counting.............................................................................33
13.   Autorelease.........................................................................................35
14.   Dealoc.................................................................................................39
15.   Referência ..........................................................................................40
Introdução
.h   Header Files
.m   Implementation




                           3
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
Classes
• Declarar Interface (arquivo.h)
@interface SomeClass : NSObject { }
                         Herança




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

                            6
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
Classes
• Errado! Compilador entra em loop

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




                                                    8
Classes
• Certo   Declaração de Foward


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




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

int number;
SomeClass *object;



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

SomeClass *someClass = [SomeClass alloc];




                                                 11
Instâncias
Uma opção ao * é o id
Ex.:

id number;
id someClass = [SomeClass alloc];




                                    12
Fields
//SomeClass.h
#import <Framework>
@class Another Class;
@interface SomeClass{
       AnotheClass *anotherClass;
       float rate;
       NSString *name;
}
@end
                                    13
Privilégios de Acesso
@protected (default)
@public
@private

Ex.:
@public NSString *name



                                 14
Privilégios de Acesso
Acessar atributos das classes:

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




                                  15
Métodos / Funções
( - ) Métodos da Instância
( + ) Métodos Státicos Não precisam da classe instânciada




                                                            16
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
                                                                17
Métodos / Funções
• Implementação dos métodos declarados
//SomeClass.m
@interface SomeClass()
@end
@implementation SomeClass
+ (void) doSomething{
       <implementation...>
}
@end
                                         18
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
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
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
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
                                              22
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
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
Propriedades / Encapsulamento
//SomeClass.m
...
@implementation SomeClass
@synthesize rate;
@synthesize name;
...
@end



                                  25
Propriedades / Encapsulamento
• Acessando as properties

[obj setRate:5.0f];
obj.rate = 5;
                            Accessors
[obj setName:@”Hi”];
obj.name = @”Hi”;

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

                                        26
Initializers / Construtores
• Inicializar o objeto

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




                                             27
Initializers / Construtores
• Para criar diversos inicializadores é
  necessários definir no header.

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




                                                          28
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];
}
                                                           29
Initializers / Construtores
• Instânciar e Inicializar

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




                                              30
GERENCIAMENTO DE MEMÓRIA


                           31
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
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
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

                                                34
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
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
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
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
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
REFERÊNCIA
W-M. Lee. Beginning iOS 4 application development. Wrox 2010.
Appendix D, p.591-611.
                                                                40

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Threads 09: Paralelismo
Threads 09: ParalelismoThreads 09: Paralelismo
Threads 09: Paralelismo
 
Threads 06: Coleções concorrentes
Threads 06: Coleções concorrentesThreads 06: Coleções concorrentes
Threads 06: Coleções concorrentes
 
Threads 03: Ciclo de vida, aplicações e boas práticas
Threads 03: Ciclo de vida, aplicações e boas práticasThreads 03: Ciclo de vida, aplicações e boas práticas
Threads 03: Ciclo de vida, aplicações e boas práticas
 
Threads 08: Executores e Futures
Threads 08: Executores e FuturesThreads 08: Executores e Futures
Threads 08: Executores e Futures
 
Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)
 
Iteraveis e geradores
Iteraveis e geradoresIteraveis e geradores
Iteraveis e geradores
 
Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)
 
SEA Rails na pratica
SEA Rails na praticaSEA Rails na pratica
SEA Rails na pratica
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compacto
 
Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Aprendendo objective c - parte 1
Aprendendo objective c - parte 1
 
Aula05
Aula05Aula05
Aula05
 
Poo
PooPoo
Poo
 
3- POO
3- POO3- POO
3- POO
 
Threads 04 Variáveis atômicas
Threads 04 Variáveis atômicasThreads 04 Variáveis atômicas
Threads 04 Variáveis atômicas
 
Javafx Introdução
Javafx IntroduçãoJavafx Introdução
Javafx Introdução
 
Reflections
ReflectionsReflections
Reflections
 
Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em Python
 
Java 13
Java 13Java 13
Java 13
 
Programação orientada a objetos - IV
Programação orientada a objetos - IVProgramação orientada a objetos - IV
Programação orientada a objetos - IV
 
Java 16
Java 16Java 16
Java 16
 

Semelhante a Objective-C Fundamentos

Minicurso Objective-C
Minicurso Objective-CMinicurso Objective-C
Minicurso Objective-CSaulo Arruda
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - BrazilStephen Chin
 
Três anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitorTrês anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitorFelipe Hummel
 
Introdução ao JS1.pptx
Introdução ao JS1.pptxIntrodução ao JS1.pptx
Introdução ao JS1.pptxLuanDev1
 
Curso avançado de c++ em portugues
Curso avançado de c++ em portuguesCurso avançado de c++ em portugues
Curso avançado de c++ em portuguesLaura
 
Javascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - ConceitosJavascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - ConceitosWesley Lemos
 
A primeira app iOS (a gente não esquece)
A primeira app iOS (a gente não esquece)A primeira app iOS (a gente não esquece)
A primeira app iOS (a gente não esquece)Ricardo Valeriano
 
JavaScript - Objectos e Arrays
JavaScript - Objectos e ArraysJavaScript - Objectos e Arrays
JavaScript - Objectos e ArraysValter Cinquenta
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
07 construtores e finalize
07   construtores e finalize07   construtores e finalize
07 construtores e finalizeArtur Todeschini
 
Curso JavaScript - Aula de Introdução como Programar
Curso JavaScript - Aula de Introdução como ProgramarCurso JavaScript - Aula de Introdução como Programar
Curso JavaScript - Aula de Introdução como ProgramarTiago Antônio da Silva
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens PooInfogenius
 

Semelhante a Objective-C Fundamentos (20)

java_avancado.pdf
java_avancado.pdfjava_avancado.pdf
java_avancado.pdf
 
Minicurso Objective-C
Minicurso Objective-CMinicurso Objective-C
Minicurso Objective-C
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil
 
Três anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitorTrês anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitor
 
Aprendendo ruby
Aprendendo rubyAprendendo ruby
Aprendendo ruby
 
Introdução ao JS1.pptx
Introdução ao JS1.pptxIntrodução ao JS1.pptx
Introdução ao JS1.pptx
 
Java 02
Java 02Java 02
Java 02
 
Curso avançado de c++ em portugues
Curso avançado de c++ em portuguesCurso avançado de c++ em portugues
Curso avançado de c++ em portugues
 
Javascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - ConceitosJavascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - Conceitos
 
Palestra cbq
Palestra cbqPalestra cbq
Palestra cbq
 
PowerShell
PowerShellPowerShell
PowerShell
 
Desenvolvimento iOS
Desenvolvimento iOSDesenvolvimento iOS
Desenvolvimento iOS
 
A primeira app iOS (a gente não esquece)
A primeira app iOS (a gente não esquece)A primeira app iOS (a gente não esquece)
A primeira app iOS (a gente não esquece)
 
Sua primeira app iOS
 Sua primeira app iOS Sua primeira app iOS
Sua primeira app iOS
 
JavaScript - Objectos e Arrays
JavaScript - Objectos e ArraysJavaScript - Objectos e Arrays
JavaScript - Objectos e Arrays
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
07 construtores e finalize
07   construtores e finalize07   construtores e finalize
07 construtores e finalize
 
Curso JavaScript - Aula de Introdução como Programar
Curso JavaScript - Aula de Introdução como ProgramarCurso JavaScript - Aula de Introdução como Programar
Curso JavaScript - Aula de Introdução como Programar
 
Python 04
Python 04Python 04
Python 04
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens Poo
 

Último

Slides 1 - O gênero textual entrevista.pptx
Slides 1 - O gênero textual entrevista.pptxSlides 1 - O gênero textual entrevista.pptx
Slides 1 - O gênero textual entrevista.pptxSilvana Silva
 
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxSlides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxLuizHenriquedeAlmeid6
 
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxSlides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxLuizHenriquedeAlmeid6
 
D9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptxD9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptxRonys4
 
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOLEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOColégio Santa Teresinha
 
E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?Rosalina Simão Nunes
 
02. Informática - Windows 10 apostila completa.pdf
02. Informática - Windows 10 apostila completa.pdf02. Informática - Windows 10 apostila completa.pdf
02. Informática - Windows 10 apostila completa.pdfJorge Andrade
 
“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptx“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptxthaisamaral9365923
 
William J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfWilliam J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfAdrianaCunha84
 
ANTIGUIDADE CLÁSSICA - Grécia e Roma Antiga
ANTIGUIDADE CLÁSSICA - Grécia e Roma AntigaANTIGUIDADE CLÁSSICA - Grécia e Roma Antiga
ANTIGUIDADE CLÁSSICA - Grécia e Roma AntigaJúlio Sandes
 
Programa de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasPrograma de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasCassio Meira Jr.
 
A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.silves15
 
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxSlides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxLuizHenriquedeAlmeid6
 
Orações subordinadas substantivas (andamento).pptx
Orações subordinadas substantivas (andamento).pptxOrações subordinadas substantivas (andamento).pptx
Orações subordinadas substantivas (andamento).pptxKtiaOliveira68
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividadeMary Alvarenga
 
trabalho wanda rocha ditadura
trabalho wanda rocha ditaduratrabalho wanda rocha ditadura
trabalho wanda rocha ditaduraAdryan Luiz
 
Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalJacqueline Cerqueira
 

Último (20)

Slides 1 - O gênero textual entrevista.pptx
Slides 1 - O gênero textual entrevista.pptxSlides 1 - O gênero textual entrevista.pptx
Slides 1 - O gênero textual entrevista.pptx
 
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxSlides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
 
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxSlides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
 
D9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptxD9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptx
 
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOLEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
 
E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?
 
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA -
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA      -XI OLIMPÍADAS DA LÍNGUA PORTUGUESA      -
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA -
 
Bullying, sai pra lá
Bullying,  sai pra láBullying,  sai pra lá
Bullying, sai pra lá
 
02. Informática - Windows 10 apostila completa.pdf
02. Informática - Windows 10 apostila completa.pdf02. Informática - Windows 10 apostila completa.pdf
02. Informática - Windows 10 apostila completa.pdf
 
“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptx“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptx
 
William J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfWilliam J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdf
 
ANTIGUIDADE CLÁSSICA - Grécia e Roma Antiga
ANTIGUIDADE CLÁSSICA - Grécia e Roma AntigaANTIGUIDADE CLÁSSICA - Grécia e Roma Antiga
ANTIGUIDADE CLÁSSICA - Grécia e Roma Antiga
 
Programa de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasPrograma de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades Motoras
 
A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.
 
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxSlides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
 
CINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULACINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULA
 
Orações subordinadas substantivas (andamento).pptx
Orações subordinadas substantivas (andamento).pptxOrações subordinadas substantivas (andamento).pptx
Orações subordinadas substantivas (andamento).pptx
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividade
 
trabalho wanda rocha ditadura
trabalho wanda rocha ditaduratrabalho wanda rocha ditadura
trabalho wanda rocha ditadura
 
Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem Organizacional
 

Objective-C Fundamentos

  • 2. Sumário 1. Introdução...........................................................................................03 2. Diretivas..............................................................................................04 3. Classes.................................................................................................05 4. Instâncias............................................................................................10 5. Fields...................................................................................................13 6. Privilégios de Acesso...........................................................................14 7. Métodos/Funções...............................................................................16 8. Mensagens..........................................................................................19 9. Propriedades/Encapsulamento..........................................................21 10. Initializers / Construtores....................................................................27 11. Gerenciamento de Memória..............................................................31 12. Reference Counting.............................................................................33 13. Autorelease.........................................................................................35 14. Dealoc.................................................................................................39 15. Referência ..........................................................................................40
  • 3. Introdução .h Header Files .m Implementation 3
  • 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
  • 5. Classes • Declarar Interface (arquivo.h) @interface SomeClass : NSObject { } Herança 5
  • 6. Classes • Implementar (arquivo.m) #import “SomeClass.h” @interface SomeClass () @end @implemantation SomeClass ... @end 6
  • 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
  • 8. Classes • Errado! Compilador entra em loop //SomeClass.h // AnotherClass.h #import “AnotherClass.h” #import “SomeClass .h” @interface SomeClass @interface AnotherClass AnotherClass *anotherClass; SomeClass *someClass; @end @end 8
  • 9. Classes • Certo Declaração de Foward //SomeClass.h // AnotherClass.h @class AnotherClass; @class SomeClass; @interface SomeClass @interface AnotherClass AnotherClass *anotherClass; SomeClass *someClass; @end @end 9
  • 10. Instâncias É necessário usar o * antes do nome das variáveis. Exceto para os tipos primitivos. Ex: int number; SomeClass *object; 10
  • 11. Instâncias Aloca memória para o objeto e retorna ele para uma variável do tipo da classe. SomeClass *someClass = [SomeClass alloc]; 11
  • 12. Instâncias Uma opção ao * é o id Ex.: id number; id someClass = [SomeClass alloc]; 12
  • 13. Fields //SomeClass.h #import <Framework> @class Another Class; @interface SomeClass{ AnotheClass *anotherClass; float rate; NSString *name; } @end 13
  • 14. Privilégios de Acesso @protected (default) @public @private Ex.: @public NSString *name 14
  • 15. Privilégios de Acesso Acessar atributos das classes: someClass -> rate = 5 someClass -> @”Wei-Meng Lee”; 15
  • 16. Métodos / Funções ( - ) Métodos da Instância ( + ) Métodos Státicos Não precisam da classe instânciada 16
  • 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 17
  • 18. Métodos / Funções • Implementação dos métodos declarados //SomeClass.m @interface SomeClass() @end @implementation SomeClass + (void) doSomething{ <implementation...> } @end 18
  • 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
  • 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 22
  • 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
  • 25. Propriedades / Encapsulamento //SomeClass.m ... @implementation SomeClass @synthesize rate; @synthesize name; ... @end 25
  • 26. Propriedades / Encapsulamento • Acessando as properties [obj setRate:5.0f]; obj.rate = 5; Accessors [obj setName:@”Hi”]; obj.name = @”Hi”; NSLog([sc name]); Mutators NSLog(sc.name); 26
  • 27. Initializers / Construtores • Inicializar o objeto SomeClass *obj = [[SomeClass alloc] init]; 27
  • 28. Initializers / Construtores • Para criar diversos inicializadores é necessários definir no header. - (id) initWithName: (NSString *) n; - (id) initWithName: (NSString *) n andRate: (float) r; 28
  • 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]; } 29
  • 30. Initializers / Construtores • Instânciar e Inicializar SomeClass *obj [[SomeClass alloc] initWithName:@”Hello”]; 30
  • 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
  • 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 34
  • 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
  • 40. REFERÊNCIA W-M. Lee. Beginning iOS 4 application development. Wrox 2010. Appendix D, p.591-611. 40