SlideShare uma empresa Scribd logo
1 de 58
Desenvolvimento de
aplicativos mobile para iOS
Aula 1 - Introdução à linguagem Objective-C e ao iOS SDK
Objective-C


https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html#//
                                              apple_ref/doc/uid/TP30001163
Extensão de ANSI C
•   Convenção sintática para definição de classes

•   Convenção para métodos de classe e instância

•   Sintaxe para chamada de método (mensagem)

•   Sintaxe para declaração de propriedades

•   Convenção para tipagem estática e dinâmica

•   Blocos - segmentos de código encapsulados

•   Extensões da linguagem como protocolos e
    categorias
Vantagens

• Tipagem dinâmica detemina classe em
  tempo de execução.
• Ligação dinâmica determina o método a ser
  chamado em tempo de execução.
• Carregamento dinâmico permite adicionar
  módulos de código em tempo de execução.
Runtime System


Adiar decisões de compile time e
     link time para runtime
Objetos


Um objeto associa dados com operações
 que podem ser usadas para afetar os dados
id
• Objetos são um tipo de dados distinto: id
   typedef struct objc_object {
       Class isa;
   } *id;
Dynamic Typing
 Objetos são tipados dinamicamente
         em tempo de execução.
id myObject;

É possível também informar ao compilador a
classe do objeto estaticamente informando a
            classe no código fonte.
Rectangle* myObject;
Memory Management

• Automatic Reference Counting
 (ARC) => iOS 5+
• Manual Reference Counting (MRC)
• Garbage Collection (not iOS)
Object Messaging
 • Para fazer alguma coisa com um objeto,
    você envia uma mensagem para ele
    solicitando para executar um método.

[receiver message];
[myRectangle display];
[myRectangle setWidth:2.0];
[myRectangle setOriginX: 30.0 y: 50.0];
[receiver makeGroup:group, memberOne,     memberTwo,
memberThree];
[myRectangle setPrimaryColor:[otherRect primaryColor]];
Messages to nil
  • Enviar uma mensagem para um objeto nil
     não tem nenhum efeito em tempo de
     execução.

id anObjectMaybeNil = nil;
// this is valid
if ([anObjectMaybeNil methodThatReturnsADouble]
         == 0.0)
{
    // implementation continues...
}
Dynamic Binding


• Ao enviar uma mensagem à um objeto, o
  método que será chamado é determinado
  em tempo de execução.
Dot sintax
   • Notação usando ponto (.) como alternativa
      aos colchetes ([]) para invocar métodos de
      acesso à propriedades.

myInstance.value = 10;          [myInstance setValue:10];
self.age = 10;                  [self setAge:10];
x = person.address.street.name; x = [[[person address] street]
                                name];
Classes

• A definição de classe é um protótipo para
  um tipo de objeto;
• O compilador cria um único objeto para
  cada classe que sabe como criar outros
  objetos (factory object)
• Este objeto constrói instâncias da classe.
Herança
       NSObject

       Graphic

Text     Text

                   Shape

          Line    Rectangle
NSObject

• É uma classe raiz e não tem uma
  superclasse.
• Define um framework básico para objetos
  Objective-C e interação entre eles.
Herdando variáveis de
 instância e métodos

• Quando um objeto de classe cria uma nova
  instância, o novo objeto contém as variáveis
  de instância e métodos definidos pela
  classe assim como de suas superclasses.
Sobrescrevendo
        métodos

• Envio de mensagens para self e super
  para referenciar respectivamente métodos
  da classe atual e das superclasses.
Classes Abstratas


• Objective-C não tem sintaxe para criação
  de classes ou métodos abstratos.
Static Typing


• Você pode usar o nome da classe no lugar
  de id para designar o tipo do objeto
  Rectangle* myRectangle;
Type Introspection
 • Instâncias podem consultar seu tipo em
   tempo de execução:
if ( [anObject isMemberOfClass:someClass] )
   ...
if ( [anObject isKindOfClass:someClass] )
   ...
Class Objects
• O objeto da classe contêm:
 • Nome da classe e sua superclasse
 • Modelo das variáveis de instância
 • Declaração dos métodos seu retorno e
    seus argumentos
 • Implementação dos métodos
Class Objects


• Todos os objetos de classe são do tipo
  Class

 Class aClass = [anObject class];
 Class rectClass = [Rectangle class];
Criando instâncias
• A principal função do objeto da classe é
  criar instâncias

  Rectangle* myRectangle =
   [[Rectangle alloc] init];
  Rectangle* myRectangle =
   [[Rectangle alloc]
       initWithSize:CGSize(800, 600)];
Variáveis
 • Para todas as instâncias da classe acessarem
   uma variável, você deve defini-la
   externamente.
static MyClass *MCLSSharedInstance;
@implementation MyClass
+ (MyClass *)sharedInstance
{
// check for existence of shared instance
   return MCLSSharedInstance;
}
Inicializando objetos de
          classe
• O método initialize é chamado antes da
  criação da primeira instância da classe.

+ (void)initialize
{
  if (self == [ThisClass class]) {
        // Perform initialization here.
        ...
  }
}
Definindo uma Classe

• Em Objective-C classes são definidas em
  duas partes:
 • Uma interface que declara os métodos
    e propriedades;
 • Uma implementação que contém o
    código que implementa seus métodos.
Arquivos de código-
         fonte
Extensão                     Tipo

           Header files da definição de classes,
   .h
           tipos, funções e constantes.
           Source files da implementação em
  .m
           Objective-C ou C
           Source files da imeplementação em C++
  .mm
           além de Objective-C e C
Class Interface
• A declaração da interface da classe inicia
  com a diretiva @interface e termina
  com a diretiva @end

 @interface ClassName : ItsSuperclass
 // Method and property declarations.
 @end
Instance methods
• Marcado com um sinal menos (-), o tipo de
  retorno é opcional (usado id caso não
  informado), parâmetros são separados por
  dois pontos (:)
- (void)display;
- (float)radius;
- (void)setRadius:(float)aRadius;
- (void)setWidth:(float)width
             height:(float)height;
- makeGroup:group, ...;
Class methods
• Segue a mesma convenção dos métodos de
  instância, mas são marcadas com o sinal
  mais (+)
+ (MyClass*)sharedInstance;
+ (MyClass*)objectWithWidth:(float)width
       height:(float)height;
Variáveis de instância
@interface ClassName : ItsSuperclass
{
       // Instance variable declarations.
       float quantity;
       Rectangle* rect;
}
// Method and property declarations.
@end
Importando a interface


• O arquivo de interface pode ser importado
  em qualquer outro arquivo fonte.
  #import "Rectangle.h"
Referindo-se à outras
       classes

• Quando uma classe ainda não foi definida
  mas precisa ser referenciada você pode
  mencioná-la com a diretiva @class
  @class Rectangle, Circle;
Class Implementation
• Começa com a diretiva
  @implementation e termina com a
  diretiva @end

@implementation ClassName
{
     // Instance variable declarations.
}
// Method definitions.
@end
Using super
• O método init é pensado para funcionar
  desta forma:
  - (id)init {
      self = [super init];
      if (self) {
           ...
      }
      return self;
  }
Protocolos
• Protocolos definem métodos que podem
  ser implementados por qualquer classe. São
  úteis para:
 • Declarar métodos que espera que outra
   classe implementa;
 • Declarar uma interface escondendo sua
   classe;
 • Capturar similaridades sem relação
   hierárquica
Protocolos Formais
• Usando a diretiva @protocol
@protocol ProtocolName
// method declarations
@end
@protocol MyProtocol
- (void)requiredMethod;
@optional
- (void)anOptionalMethod;
- (void)anotherOptionalMethod;
@required
- (void)anotherRequiredMethod;
@end
Protocolos Informais
• Agrupando métodos em uma declaração de
   categoria
@interface NSObject ( MyXMLSupport )
- initFromXMLRepresentation:(NSXMLElement
*)XMLElement;
- (NSXMLElement *)XMLRepresentation;
@end
Implementando um
         Protocolo
  • Uma classe diz que adota um protocolo
    formal indicando os protocolos entre
    símbolos maior e menor (<>)
@interface ClassName : ItsSuperclass <
protocol list >

@interface ClassName ( CategoryName ) <
protocol list >

@interface Formatter : NSObject < Formatting,
Prettifying >
Conformidade com um
      protocolo
 • É possível verificar se um objeto está em
    conformidade com um protocolo

if (![receiver
conformsToProtocol:@protocol(MyXMLSupport)]) {
    // Object does not conform to MyXMLSupport
protocol
    // If you are expecting receiver to
implement methods declared in the MyXMLSupport
protocol, this is probably an error
}
Type Checking
• Em uma declaração de tipo, os protocolos
  são listados entre símbolos maior e menor
  (<>)
- (id <Formatting>)formattingService;
Formatter<Formatting> *anObject;
id <MyXMLSupport> anObject;
Propriedades
• Tipicamente métodos de acesso à
  propriedades do objeto são um par de
  getters e setters. Propriedades oferecem:
 • Uma especificação explícita de como os
    métodos de acesso se comportam;
 • O compilador pode criar esses métodos;
 • Propriedades são identificadas
    sintaticamente, o compilador dectecta
    caso elas não existam;
Declaração de
       propriedades
• Usando a diretiva @property
@property (attributes) type name;
@interface MyClass : NSObject
@property float value;
@end

// É equivalente à:
- (float)value;
- (void)setValue:(float)newValue;
Atributos
• Accessor methods names:
 • getter=getterName, setter=setterName
• Writability
 • readwrite, readonly
• Setter semantics
 • strong, weak (ARC)
 • copy, assign, retain (MRC)
Atributos

• Atomicity
 • nonatomic, atomic (default)
• Markup and Deprecation
 • __attribute__
• IBOutlet
Implementação da
      propriedade
• Usar @synthesize ou @dynamic no
  bloco @implementation

@interface MyClass : NSObject
@property(copy, readwrite) NSString *value;
@end
@implementation MyClass
@synthesize value = _value;
@end
Categorias e extensões
• Uma categoria permite adicionar métodos
  à classes existentes.
#import "ClassName.h"
@interface ClassName ( CategoryName )
// method declarations
@end
Fast Enumeration
    • Sintaxe para enumerar o conteúdo de
      coleções
    for ( Type newVariable in expression )
    { statements }

NSArray *array = [NSArray arrayWithObjects:
          @"one", @"two", @"three", @"four",
          nil];
for (NSString *element in array) {
      NSLog(@"element: %@", element);
}
Selectors

• Em Objective-C selectors tem dois
  sentidos:
 • Pode ser usado para simplesmente
    referenciar um método;
 • Pode ser um identificador único que
    substitui o nome após a compilação;
Métodos e selectors
SEL setWidthHeight;
setWidthHeight =
    @selector(setWidth:height:);
setWidthHeight =
    NSSelectorFromString(aBuffer);
NSString *method;
method =
   NSStringFromSelector(setWidthHeight);
Variável para a chamada
      do método
[friend
performSelector:@selector(gossipAbout:)
    withObject:aNeighbor];
// É equivalente à:
[friend gossipAbout:aNeighbor];

id   helper = getTheReceiver();
SEL request = getTheSelector();
[helper performSelector:request];
Evitando erros
if ( [anObject
respondsToSelector:@selector(setOrigin::)]
)
     [anObject setOrigin:0.0 :0.0];
else
     fprintf(stderr, "%s can’t be placed
n", [NSStringFromClass([anObject class])
UTF8String]);
Exception Handling


• Exceções em Objective-C suportam quatro
  diretivas do compilador: @try, @catch,
  @throw, @finally
Tratando exceções
Cup *cup = [[Cup alloc] init];
@try {
    [cup fill];
}
@catch (NSException *exception) {
    NSLog(@"main: Caught %@: %@", [exception
name], [exception reason]);
}
@catch (id ue) {
   // ...
}
@finally {
    [cup release];
}
Lançando exceções
NSException *exception = [NSException
   exceptionWithName: @"HotTeaException"
   reason: @"The tea is too hot"
   userInfo: nil];
@throw exception;
DOJO!
DOJO!


Tic Tac Troll

Mais conteúdo relacionado

Mais procurados

Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etc
Luciano Ramalho
 

Mais procurados (19)

Iteraveis e geradores
Iteraveis e geradoresIteraveis e geradores
Iteraveis e geradores
 
Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etc
 
Aula 1 | Introdução a C++
Aula 1 | Introdução a C++Aula 1 | Introdução a C++
Aula 1 | Introdução a C++
 
Linguagem C - Ponteiros
Linguagem C - PonteirosLinguagem C - Ponteiros
Linguagem C - Ponteiros
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Javafx Introdução
Javafx IntroduçãoJavafx Introdução
Javafx Introdução
 
Python 02
Python 02Python 02
Python 02
 
Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03
 
Introducao Google GO
Introducao Google GOIntroducao Google GO
Introducao Google GO
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em Python
 
Objective-C
Objective-CObjective-C
Objective-C
 
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
 
Python 03
Python 03Python 03
Python 03
 
RMI em Java
RMI em JavaRMI em Java
RMI em Java
 
Javascript
JavascriptJavascript
Javascript
 
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
 
Programação orientada a objetos - IV
Programação orientada a objetos - IVProgramação orientada a objetos - IV
Programação orientada a objetos - IV
 
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)
 
Ruby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosRuby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanos
 

Destaque

Destaque (10)

Desenvolvimento iOS - Aula 5
Desenvolvimento iOS - Aula 5Desenvolvimento iOS - Aula 5
Desenvolvimento iOS - Aula 5
 
Desenvolvimento iOS - Aula 3
Desenvolvimento iOS - Aula 3Desenvolvimento iOS - Aula 3
Desenvolvimento iOS - Aula 3
 
Desenvolvimento iOS - Aula 2
Desenvolvimento iOS - Aula 2Desenvolvimento iOS - Aula 2
Desenvolvimento iOS - Aula 2
 
Desenvolvimento iOS - Aula 4
Desenvolvimento iOS - Aula 4Desenvolvimento iOS - Aula 4
Desenvolvimento iOS - Aula 4
 
Desenvolvimento iOS - Aula 6
Desenvolvimento iOS - Aula 6Desenvolvimento iOS - Aula 6
Desenvolvimento iOS - Aula 6
 
A história do trakto
A história do traktoA história do trakto
A história do trakto
 
Introdução ao desenvolvimento de apps para iOS
Introdução ao desenvolvimento de apps para iOSIntrodução ao desenvolvimento de apps para iOS
Introdução ao desenvolvimento de apps para iOS
 
MVP: conheça os 2 significados ao criar o seu #cpbr8
MVP: conheça os 2 significados ao criar o seu #cpbr8MVP: conheça os 2 significados ao criar o seu #cpbr8
MVP: conheça os 2 significados ao criar o seu #cpbr8
 
ICC - Aula 02 - Algoritmo estruturado, constantes, variáveis e comentários
ICC - Aula 02 - Algoritmo estruturado, constantes, variáveis e comentáriosICC - Aula 02 - Algoritmo estruturado, constantes, variáveis e comentários
ICC - Aula 02 - Algoritmo estruturado, constantes, variáveis e comentários
 
Introdução ao apple watch
Introdução ao apple watchIntrodução ao apple watch
Introdução ao apple watch
 

Semelhante a Desenvolvimento iOS - Aula 1

Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Adriano Teixeira de Souza
 
Programação Orientada a Objetos - Uso da O.O. em Java
Programação Orientada a Objetos - Uso da O.O. em JavaProgramação Orientada a Objetos - Uso da O.O. em Java
Programação Orientada a Objetos - Uso da O.O. em Java
Cristiano Almeida
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POO
Wesley Lemos
 

Semelhante a Desenvolvimento iOS - Aula 1 (20)

3- POO
3- POO3- POO
3- POO
 
Poo
PooPoo
Poo
 
Orientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores AndroidOrientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores Android
 
Java7
Java7Java7
Java7
 
Programação C - Aula 1
Programação C - Aula 1Programação C - Aula 1
Programação C - Aula 1
 
java_avancado.pdf
java_avancado.pdfjava_avancado.pdf
java_avancado.pdf
 
Aula1
Aula1Aula1
Aula1
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
 
Java 02
Java 02Java 02
Java 02
 
Orientação a Objetos
Orientação a ObjetosOrientação a Objetos
Orientação a Objetos
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
 
JAVA - Orientação a Objetos
JAVA - Orientação a ObjetosJAVA - Orientação a Objetos
JAVA - Orientação a Objetos
 
Poo
PooPoo
Poo
 
Programação Orientada a Objetos - Uso da O.O. em Java
Programação Orientada a Objetos - Uso da O.O. em JavaProgramação Orientada a Objetos - Uso da O.O. em Java
Programação Orientada a Objetos - Uso da O.O. em Java
 
Reflections
ReflectionsReflections
Reflections
 
Java - Visão geral e Exercícios
Java - Visão geral e ExercíciosJava - Visão geral e Exercícios
Java - Visão geral e Exercícios
 
Aula 1 - Linguagem III
Aula 1 - Linguagem IIIAula 1 - Linguagem III
Aula 1 - Linguagem III
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POO
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03
 
Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserver
 

Mais de Saulo Arruda

Mais de Saulo Arruda (20)

Oportunidade para desenvolvedores na era das startups
Oportunidade para desenvolvedores na era das startupsOportunidade para desenvolvedores na era das startups
Oportunidade para desenvolvedores na era das startups
 
Growth Hacking Mobile - BRAPPS 2014
Growth Hacking Mobile - BRAPPS 2014Growth Hacking Mobile - BRAPPS 2014
Growth Hacking Mobile - BRAPPS 2014
 
Growth hacking - Jera Retrospectiva
Growth hacking  - Jera RetrospectivaGrowth hacking  - Jera Retrospectiva
Growth hacking - Jera Retrospectiva
 
#CPBR7 - Métricas para startups
#CPBR7 - Métricas para startups#CPBR7 - Métricas para startups
#CPBR7 - Métricas para startups
 
StartupFarm métricas
StartupFarm métricasStartupFarm métricas
StartupFarm métricas
 
Mande seu chefe pentear macaco
Mande seu chefe pentear macacoMande seu chefe pentear macaco
Mande seu chefe pentear macaco
 
Sthart - Desenvolvimento Web e Mobile
Sthart - Desenvolvimento Web e MobileSthart - Desenvolvimento Web e Mobile
Sthart - Desenvolvimento Web e Mobile
 
Como ganhar dinheiro com aplicativos mobile?
Como ganhar dinheiro com aplicativos mobile?Como ganhar dinheiro com aplicativos mobile?
Como ganhar dinheiro com aplicativos mobile?
 
Startups - É programando que se empreende
Startups - É programando que se empreendeStartups - É programando que se empreende
Startups - É programando que se empreende
 
SCRUM - Aula 2
SCRUM - Aula 2SCRUM - Aula 2
SCRUM - Aula 2
 
SCRUM - Aula1
SCRUM - Aula1SCRUM - Aula1
SCRUM - Aula1
 
TDC 2012 - Querem me comprar, e agora?
TDC 2012 - Querem me comprar, e agora?TDC 2012 - Querem me comprar, e agora?
TDC 2012 - Querem me comprar, e agora?
 
Empreendedorismo Agil
Empreendedorismo AgilEmpreendedorismo Agil
Empreendedorismo Agil
 
Minicurso Ruby
Minicurso RubyMinicurso Ruby
Minicurso Ruby
 
Rails nas Nuvens
Rails nas NuvensRails nas Nuvens
Rails nas Nuvens
 
Aprendendo a errar ou errando para aprender
Aprendendo a errar ou errando para aprenderAprendendo a errar ou errando para aprender
Aprendendo a errar ou errando para aprender
 
JBoss TRE - Aula1
JBoss TRE - Aula1JBoss TRE - Aula1
JBoss TRE - Aula1
 
Todo mundo nasce Agil
Todo mundo nasce AgilTodo mundo nasce Agil
Todo mundo nasce Agil
 
Workshop Desenvolvimento Agil
Workshop Desenvolvimento AgilWorkshop Desenvolvimento Agil
Workshop Desenvolvimento Agil
 
Empreendedorismo e Desenvolvimento Agil
Empreendedorismo e Desenvolvimento AgilEmpreendedorismo e Desenvolvimento Agil
Empreendedorismo e Desenvolvimento Agil
 

Desenvolvimento iOS - Aula 1

  • 1. Desenvolvimento de aplicativos mobile para iOS Aula 1 - Introdução à linguagem Objective-C e ao iOS SDK
  • 3. Extensão de ANSI C • Convenção sintática para definição de classes • Convenção para métodos de classe e instância • Sintaxe para chamada de método (mensagem) • Sintaxe para declaração de propriedades • Convenção para tipagem estática e dinâmica • Blocos - segmentos de código encapsulados • Extensões da linguagem como protocolos e categorias
  • 4. Vantagens • Tipagem dinâmica detemina classe em tempo de execução. • Ligação dinâmica determina o método a ser chamado em tempo de execução. • Carregamento dinâmico permite adicionar módulos de código em tempo de execução.
  • 5. Runtime System Adiar decisões de compile time e link time para runtime
  • 6. Objetos Um objeto associa dados com operações que podem ser usadas para afetar os dados
  • 7. id • Objetos são um tipo de dados distinto: id typedef struct objc_object { Class isa; } *id;
  • 8. Dynamic Typing Objetos são tipados dinamicamente em tempo de execução. id myObject; É possível também informar ao compilador a classe do objeto estaticamente informando a classe no código fonte. Rectangle* myObject;
  • 9. Memory Management • Automatic Reference Counting (ARC) => iOS 5+ • Manual Reference Counting (MRC) • Garbage Collection (not iOS)
  • 10. Object Messaging • Para fazer alguma coisa com um objeto, você envia uma mensagem para ele solicitando para executar um método. [receiver message]; [myRectangle display]; [myRectangle setWidth:2.0]; [myRectangle setOriginX: 30.0 y: 50.0]; [receiver makeGroup:group, memberOne, memberTwo, memberThree]; [myRectangle setPrimaryColor:[otherRect primaryColor]];
  • 11. Messages to nil • Enviar uma mensagem para um objeto nil não tem nenhum efeito em tempo de execução. id anObjectMaybeNil = nil; // this is valid if ([anObjectMaybeNil methodThatReturnsADouble] == 0.0) { // implementation continues... }
  • 12. Dynamic Binding • Ao enviar uma mensagem à um objeto, o método que será chamado é determinado em tempo de execução.
  • 13. Dot sintax • Notação usando ponto (.) como alternativa aos colchetes ([]) para invocar métodos de acesso à propriedades. myInstance.value = 10; [myInstance setValue:10]; self.age = 10; [self setAge:10]; x = person.address.street.name; x = [[[person address] street] name];
  • 14. Classes • A definição de classe é um protótipo para um tipo de objeto; • O compilador cria um único objeto para cada classe que sabe como criar outros objetos (factory object) • Este objeto constrói instâncias da classe.
  • 15. Herança NSObject Graphic Text Text Shape Line Rectangle
  • 16. NSObject • É uma classe raiz e não tem uma superclasse. • Define um framework básico para objetos Objective-C e interação entre eles.
  • 17. Herdando variáveis de instância e métodos • Quando um objeto de classe cria uma nova instância, o novo objeto contém as variáveis de instância e métodos definidos pela classe assim como de suas superclasses.
  • 18. Sobrescrevendo métodos • Envio de mensagens para self e super para referenciar respectivamente métodos da classe atual e das superclasses.
  • 19. Classes Abstratas • Objective-C não tem sintaxe para criação de classes ou métodos abstratos.
  • 20. Static Typing • Você pode usar o nome da classe no lugar de id para designar o tipo do objeto Rectangle* myRectangle;
  • 21. Type Introspection • Instâncias podem consultar seu tipo em tempo de execução: if ( [anObject isMemberOfClass:someClass] ) ... if ( [anObject isKindOfClass:someClass] ) ...
  • 22. Class Objects • O objeto da classe contêm: • Nome da classe e sua superclasse • Modelo das variáveis de instância • Declaração dos métodos seu retorno e seus argumentos • Implementação dos métodos
  • 23. Class Objects • Todos os objetos de classe são do tipo Class Class aClass = [anObject class]; Class rectClass = [Rectangle class];
  • 24. Criando instâncias • A principal função do objeto da classe é criar instâncias Rectangle* myRectangle = [[Rectangle alloc] init]; Rectangle* myRectangle = [[Rectangle alloc] initWithSize:CGSize(800, 600)];
  • 25. Variáveis • Para todas as instâncias da classe acessarem uma variável, você deve defini-la externamente. static MyClass *MCLSSharedInstance; @implementation MyClass + (MyClass *)sharedInstance { // check for existence of shared instance return MCLSSharedInstance; }
  • 26. Inicializando objetos de classe • O método initialize é chamado antes da criação da primeira instância da classe. + (void)initialize { if (self == [ThisClass class]) { // Perform initialization here. ... } }
  • 27. Definindo uma Classe • Em Objective-C classes são definidas em duas partes: • Uma interface que declara os métodos e propriedades; • Uma implementação que contém o código que implementa seus métodos.
  • 28. Arquivos de código- fonte Extensão Tipo Header files da definição de classes, .h tipos, funções e constantes. Source files da implementação em .m Objective-C ou C Source files da imeplementação em C++ .mm além de Objective-C e C
  • 29. Class Interface • A declaração da interface da classe inicia com a diretiva @interface e termina com a diretiva @end @interface ClassName : ItsSuperclass // Method and property declarations. @end
  • 30. Instance methods • Marcado com um sinal menos (-), o tipo de retorno é opcional (usado id caso não informado), parâmetros são separados por dois pontos (:) - (void)display; - (float)radius; - (void)setRadius:(float)aRadius; - (void)setWidth:(float)width height:(float)height; - makeGroup:group, ...;
  • 31. Class methods • Segue a mesma convenção dos métodos de instância, mas são marcadas com o sinal mais (+) + (MyClass*)sharedInstance; + (MyClass*)objectWithWidth:(float)width height:(float)height;
  • 32. Variáveis de instância @interface ClassName : ItsSuperclass { // Instance variable declarations. float quantity; Rectangle* rect; } // Method and property declarations. @end
  • 33. Importando a interface • O arquivo de interface pode ser importado em qualquer outro arquivo fonte. #import "Rectangle.h"
  • 34. Referindo-se à outras classes • Quando uma classe ainda não foi definida mas precisa ser referenciada você pode mencioná-la com a diretiva @class @class Rectangle, Circle;
  • 35. Class Implementation • Começa com a diretiva @implementation e termina com a diretiva @end @implementation ClassName { // Instance variable declarations. } // Method definitions. @end
  • 36. Using super • O método init é pensado para funcionar desta forma: - (id)init { self = [super init]; if (self) { ... } return self; }
  • 37. Protocolos • Protocolos definem métodos que podem ser implementados por qualquer classe. São úteis para: • Declarar métodos que espera que outra classe implementa; • Declarar uma interface escondendo sua classe; • Capturar similaridades sem relação hierárquica
  • 38. Protocolos Formais • Usando a diretiva @protocol @protocol ProtocolName // method declarations @end @protocol MyProtocol - (void)requiredMethod; @optional - (void)anOptionalMethod; - (void)anotherOptionalMethod; @required - (void)anotherRequiredMethod; @end
  • 39. Protocolos Informais • Agrupando métodos em uma declaração de categoria @interface NSObject ( MyXMLSupport ) - initFromXMLRepresentation:(NSXMLElement *)XMLElement; - (NSXMLElement *)XMLRepresentation; @end
  • 40. Implementando um Protocolo • Uma classe diz que adota um protocolo formal indicando os protocolos entre símbolos maior e menor (<>) @interface ClassName : ItsSuperclass < protocol list > @interface ClassName ( CategoryName ) < protocol list > @interface Formatter : NSObject < Formatting, Prettifying >
  • 41. Conformidade com um protocolo • É possível verificar se um objeto está em conformidade com um protocolo if (![receiver conformsToProtocol:@protocol(MyXMLSupport)]) { // Object does not conform to MyXMLSupport protocol // If you are expecting receiver to implement methods declared in the MyXMLSupport protocol, this is probably an error }
  • 42. Type Checking • Em uma declaração de tipo, os protocolos são listados entre símbolos maior e menor (<>) - (id <Formatting>)formattingService; Formatter<Formatting> *anObject; id <MyXMLSupport> anObject;
  • 43. Propriedades • Tipicamente métodos de acesso à propriedades do objeto são um par de getters e setters. Propriedades oferecem: • Uma especificação explícita de como os métodos de acesso se comportam; • O compilador pode criar esses métodos; • Propriedades são identificadas sintaticamente, o compilador dectecta caso elas não existam;
  • 44. Declaração de propriedades • Usando a diretiva @property @property (attributes) type name; @interface MyClass : NSObject @property float value; @end // É equivalente à: - (float)value; - (void)setValue:(float)newValue;
  • 45. Atributos • Accessor methods names: • getter=getterName, setter=setterName • Writability • readwrite, readonly • Setter semantics • strong, weak (ARC) • copy, assign, retain (MRC)
  • 46. Atributos • Atomicity • nonatomic, atomic (default) • Markup and Deprecation • __attribute__ • IBOutlet
  • 47. Implementação da propriedade • Usar @synthesize ou @dynamic no bloco @implementation @interface MyClass : NSObject @property(copy, readwrite) NSString *value; @end @implementation MyClass @synthesize value = _value; @end
  • 48. Categorias e extensões • Uma categoria permite adicionar métodos à classes existentes. #import "ClassName.h" @interface ClassName ( CategoryName ) // method declarations @end
  • 49. Fast Enumeration • Sintaxe para enumerar o conteúdo de coleções for ( Type newVariable in expression ) { statements } NSArray *array = [NSArray arrayWithObjects: @"one", @"two", @"three", @"four", nil]; for (NSString *element in array) { NSLog(@"element: %@", element); }
  • 50. Selectors • Em Objective-C selectors tem dois sentidos: • Pode ser usado para simplesmente referenciar um método; • Pode ser um identificador único que substitui o nome após a compilação;
  • 51. Métodos e selectors SEL setWidthHeight; setWidthHeight = @selector(setWidth:height:); setWidthHeight = NSSelectorFromString(aBuffer); NSString *method; method = NSStringFromSelector(setWidthHeight);
  • 52. Variável para a chamada do método [friend performSelector:@selector(gossipAbout:) withObject:aNeighbor]; // É equivalente à: [friend gossipAbout:aNeighbor]; id helper = getTheReceiver(); SEL request = getTheSelector(); [helper performSelector:request];
  • 53. Evitando erros if ( [anObject respondsToSelector:@selector(setOrigin::)] ) [anObject setOrigin:0.0 :0.0]; else fprintf(stderr, "%s can’t be placed n", [NSStringFromClass([anObject class]) UTF8String]);
  • 54. Exception Handling • Exceções em Objective-C suportam quatro diretivas do compilador: @try, @catch, @throw, @finally
  • 55. Tratando exceções Cup *cup = [[Cup alloc] init]; @try { [cup fill]; } @catch (NSException *exception) { NSLog(@"main: Caught %@: %@", [exception name], [exception reason]); } @catch (id ue) { // ... } @finally { [cup release]; }
  • 56. Lançando exceções NSException *exception = [NSException exceptionWithName: @"HotTeaException" reason: @"The tea is too hot" userInfo: nil]; @throw exception;
  • 57. DOJO!

Notas do Editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n