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

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

Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2Maria Teresa Thomaz
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMHELENO FAVACHO
 
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfPROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfHELENO FAVACHO
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfTutor de matemática Ícaro
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...HELENO FAVACHO
 
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...andreiavys
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxLuizHenriquedeAlmeid6
 
Aula de jornada de trabalho - reforma.ppt
Aula de jornada de trabalho - reforma.pptAula de jornada de trabalho - reforma.ppt
Aula de jornada de trabalho - reforma.pptPedro Luis Moraes
 
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxMonoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxFlviaGomes64
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...PatriciaCaetano18
 
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfPROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfHELENO FAVACHO
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfHELENO FAVACHO
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdfmarlene54545
 
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVAEDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVAssuser2ad38b
 
Texto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.pptTexto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.pptjricardo76
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxLuizHenriquedeAlmeid6
 
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfPROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfHELENO FAVACHO
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptssuser2b53fe
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxLuizHenriquedeAlmeid6
 

Último (20)

Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
 
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfPROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
 
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
 
Aula de jornada de trabalho - reforma.ppt
Aula de jornada de trabalho - reforma.pptAula de jornada de trabalho - reforma.ppt
Aula de jornada de trabalho - reforma.ppt
 
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxMonoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
 
Aula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIXAula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIX
 
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfPROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
 
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVAEDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
 
Texto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.pptTexto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.ppt
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
 
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfPROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.ppt
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
 

Objective-C

  • 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