Ir para conteúdo
  • Cadastre-se

Uso de underline em @synthesize


Posts Recomendados

Estou estudando as vídeo-aulas de desenvolvimento iOS da Universidade de Stanford. Na aula "Lecture 2 - My First iOS App", sobre uma calculadora RPN, eu notei que o professor usa a sintaxe em @synthesize:

<code>@synthesize operandStack = _operandStack;</code>

Por que ele usa "_operandStack" com underline? Uma explicação resumida que se dá, posteriormente é a seguinte:

"You've learned hot to... use "_propertyname" to choose the name @synthesize uses for its backing instance variable"

O que ele quis dizer com isso? Alguém poderia dar uma ajuda? Tenho noção de Java OO e fazem 2 semanas que estou lendo e estudando materiais de Objective-C. Mas ainda tenho algumas dúvidas.

Link para o comentário
Compartilhar em outros sites

  • Respostas 2
  • Criado
  • Última resposta

Top Postadores Neste Tópico

Dias Populares

Top Postadores Neste Tópico

Isso é simplesmente o padrão de uso da propriedade

Uma propriedade é apenas uma marcação para um par de métodos, no caso a propriedade operandStack apenas marca o get 'operandStack' e o set 'setOperandStack'

_operandStack seria a variável instanciada usada dentro desses métodos ... o @synthesize deve gerar um getter e setter semelhante a isso por exemplo ...

- (NSString *) operandStack: <------------ a Assinatura do método

{

return _operandStack;

}

- (void) setOperandstack:(NSString *)value <------------ a Assinatura do método

{

[value retain];

[_operandStack release]; <------------- Liberação de qualquer valor anterior na variável instanciada.

_operandStack = value; <-------------- Variável com valor sendo instanciado (não sei se existe essa palavra mas enfim ... )

}

Editado por Artur Felipe
Link para o comentário
Compartilhar em outros sites

Valeu pela explicação, Artur Felipe. Se bem que foi um pouco de grego para mim (hehehe). Um dos códigos em questão está abaixo. Eu fui fazendo o exercício com os objetos, variáveis e métodos traduzindo para o português.

Sei que o @synthesize cria os getters e setters e permite o "dot notation".

Abaixo, estão 2 códigos que fui montando. Se eu entendi direito, o uso de "_nomeDaClasse" é usado apenas para instanciar o objeto? Se eu não usasse (como venho fazendo), qual seria o problema?

No caso citado (código verde), não seria mais simples eu colocar apenas a linha:

<code>NSMutableArray *operacaoPilha = [[NSMutableArray alloc] init];</code>

e tirar o @property, @synthesize e outros?

<code>//

//  CalculadoraCerebro.m

//  Calculadora

//

#import "CalculadoraCerebro.h"

@interface CalculadoraCerebro()

@property (nonatomic, strong) NSMutableArray *operacaoPilha;

@end

@implementation CalculadoraCerebro

@synthesize operacaoPilha = _operacaoPilha;

- (NSMutableArray *)operacaoPilha

{

    if (!_operacaoPilha) { // ou "if (operacaoPilha == nil)"

        _operacaoPilha = [[NSMutableArray alloc] init];

    }

    return _operacaoPilha;

}

- (void)pressionarOperador:(double)operador;

{

    NSNumber *operadorObjeto = [NSNumber numberWithDouble:operador];

    [self.operacaoPilha addObject:operadorObjeto];

}

- (double)popOperador

{

    NSNumber *operadorObjeto = [self.operacaoPilha lastObject];

    if (operadorObjeto) [self.operacaoPilha removeLastObject];

    return [operadorObjeto doubleValue];

}

- (double)fazerOperacao:(NSString *)operacao;

{

    double result = 0;

    

    if ([operacao isEqualToString:@"+"]) {

        result = [self popOperador] + [self popOperador];

    } else if ([@"*" isEqualToString:operacao]) {

        result = [self popOperador] * [self popOperador];

    } else if ([operacao isEqualToString:@"-"]) {

        double subtracao = [self popOperador];

        result = [self popOperador] - subtracao;

    } else if ([operacao isEqualToString:@"/"]) {

        double divisao = [self popOperador];

        if (divisao) result = [self popOperador] / divisao;

    }

    

    [self pressionarOperador:result];

    

    return result;

}

@end</code>

---

<code>//

//  CalculadoraViewController.m

//  Calculadora

//

#import "CalculadoraViewController.h"

#import "CalculadoraCerebro.h"

// o método boleano sempre inicia em NO

@interface CalculadoraViewController ()

@property (nonatomic) BOOL usuarioNoMeioDaOperacao;

@property (nonatomic, strong) CalculadoraCerebro *cerebro;

@end

@implementation CalculadoraViewController

@synthesize display; // @synthesize cria getters e setters

@synthesize usuarioNoMeioDaOperacao;

@synthesize cerebro = _cerebro;

- (CalculadoraCerebro *)cerebro

{

    if (!_cerebro) _cerebro = [[CalculadoraCerebro alloc] init];

    return _cerebro;

}

- (IBAction)digitoPressionado:(UIButton *)sender

{

    NSString *digito = sender.currentTitle;

    if (self.usuarioNoMeioDaOperacao) { // na primeira vez, sempre a variável vai estar NO

        self.display.text = [self.display.text stringByAppendingString:digito];

    } else {

        self.display.text = digito;

        self.usuarioNoMeioDaOperacao = YES; // depois de digitado, o else muda o estado para YES

    }

}

- (IBAction)enterPressionado

{

    [self.cerebro pressionarOperador:[self.display.text doubleValue]];

    self.usuarioNoMeioDaOperacao = NO;

}

- (IBAction)operacaoPressionada:(id)sender

{

    if (self.usuarioNoMeioDaOperacao) {

        [self enterPressionado];

    }

    NSString *operacao = [sender currentTitle];

    double result = [self.cerebro fazerOperacao:operacao];

    self.display.text = [NSString stringWithFormat:@"%g", result];

}

@end</code>

Link para o comentário
Compartilhar em outros sites

Participe do debate

Você pode postar agora e se registrar depois. Se você tem uma conta, entre agora para postar com ela.

Visitante
Responder este tópico…

×   Você colou conteúdo com formatação.   Remover formatação

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Limpar editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.



×
×
  • Criar Novo...