Ir para conteúdo
  • Cadastre-se

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
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>

Compartilhar este post


Link para o post
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.



  • Conteúdo Similar

    • Por wfalvess
      Há pouco tempo o Instagram parou de enviar qualquer notificação no meu iPhone Xr com iOS 13.6. O app está atualizado para a versão mais recente (152.0) e as notificações, tanto nos ajustes do iOS, tanto nas configurações do Instagram estão todas ativadas. Já reinstalei o aplicativo 5 vezes e nada resolve, continua sem chegar qualquer notificação, algo que só está acontecendo unicamente com esse app. A princípio eu achava que poderia ser algum bloqueio/bug nas minhas contas no aplicativo, porém fiz um teste usando um iPhone SE reserva e nesse aparelho as notificações chegam normalmente, de todas as contas. Há relatos semelhantes na internet de usuários que inclusive já resetaram o iOS e mesmo assim o Instagram continua sem enviar nenhuma notificação. Por que mesmo apagando o app e baixando de novo o problema persiste? Pode ser um problema ao baixar o aplicativo da App Store e quando ele identifica que é o mesmo aparelho continua bugado? Alguém pode dar uma luz sobre o que pode estar ocorrendo? Já pensei em mil possibilidades...
    • Por Adrielle Oliveira
      Queria saber se o MacBook white Intel core duo 2 8gb ram 512gb armazenamento 13” seria bom pra uso ? 
       
      achei um por R$1.000,00
      seria pra uso comum, navegação na internet, ver filmes, e alguns trabalhos com Office. 
    • Por Fábio Ichiy
      Gente sabe o que pode estar acontecendo?
      To tentando atualizar o SE da minha mãe que ainda tá no 12.4.1 e dá esse erro aqui no Mac.
      No caso, to tentando instalar não a última versão do iOS mas a 13.4.1 nele, que é o IPSW que já tenho aqui salvo no computador. Será que pode ser isso? Será que se eu baixar o IPSW do iOS 13.5 ele vai aceitar fazer a atualização?
      O Mac tbm não está na ÚLTIMA versão, está na 10.15.4

    • Por cfroes
      bom dia colegas. ao transferir arquivos pelo airdrop reparei que no ios ele reconhece 2 macbook pro ( como mostra imagem), porem só tem 1 e sempre só teve 1. isso é alguma imagem que possa ter devido a uma formatação ou algo do tipo ? como faço para ele "atualizar" a lista ou excluir o macbook que não é o certo. pois ao clicar pra enviar arquivos, apenas 1 funciona, claro.

    • Por Silvanio Januario
      Olah 
      preciso de ajuda tenho um dispositivo iOS e fiz jaibreak mais sempre q instalo um App .ipa ela entra e fecha sozinho ou pede login do iTunes alguém poderia me ajudar ?  obrigado...se algué poder ajudar por favor entre em contato 
    • Por mariomello
      É recomendável assinar plano no iCloud para utilizar o "Fotos do iCloud", quando se tem um iPhone de 16GB? Vi que assim não precisaria apagar as fotos do aparelho; o iOS cuidaria delas. E quando a Fototeca do iCloud é ativada, surgem duas opções: “Otimizar no iPhone” e “Transferir e Manter Originais”. Esta última, como o próprio nome indica, fará o download de tudo do iCloud para o iPhone.
      Será que eu teria problemas com avisos de "Capacidade cheia" do aparelho mesmo assim???
    • Por KosherX
      Meu pai tem um iphone 6s com iOS 12 e hoje ele reclamou comigo que não consegue instalar mais nada nele, quando verifiquei ele indica que quase 28GB estão sendo usados de sistema e creio que isto está errado mas não sei resolver o problema pra liberar mais memória. 

      Alguém aqui sabe como fazer pra poder apagar os arquivos e liberar espaço?

    • Por heberdelia
      Boa noite a todos.
      Recentemente atualizei meu MacBook Air 2017 para o Mac OS Catalina, além de também atualizar o iPhone XS Max (que está com a versão mais atualizada do iOS 13). No entanto, hoje fui conectar meu iPhone na porta USB do MacBook e o Mac OS não está reconhecendo o aparelho (funcionando normalmente para pen drives e outros dispositivos USB).
      Já mudei as portas e mesmo assim o iPhone não é reconhecido. Alguém saberia me informar o que pode ser isso? Como faço para resolver?

      Toda ajuda é muito bem-vinda. Desde já agradeço muitíssimo a todos pela atenção.
      Um ótimo final de semana a todos.
    • Por jpcampos
      Meu iPhone 7 estava  com 127,4 de 128Gb ocupados e não fiz nenhum backup das ultimas 28.000 mídias aproximadamente, e precisava  atualizar o iOS  para ultima versão, a qual necessitava de 3,15Gb de armazenamento. Ao apagar fotos para liberar espaço elas voltavam instantaneamente então fui reiniciar o aparelho e ficou travado na tela da maçã.  Forcei reinicialização até o modo de restauração aparecer,  fui no iTunes e cliquei em  atualizar, onde a Apple dizia que tentaria reinstalar o iOS sem apagar os dados deu como concluído mas ao solicitar acesso ao celular pelo PC aparecia que não podia ser estabelecido., ou seja não foi reconhecido pelo iTunes.  A senha do meu IDApple estava no dispositivo e não me recordo, e demora muito tempo para eles se quer entrarem em contato. Alguém sabe o que devo fazer?
    • Por Vinicius Maciel
      Pessoal boa noite!!
      Minha situação aqui é bem complexa, mas venho procurar uma solução. Comprei um iPhone 8 de terceiros e sem nota fiscal, o preço não era baixo era até um preço razoável para o iPhone 8. Só que quando eu vou ativar ele aparece uma mensagem: “esse iPhone não pode ser ativado, favor ligar no Apple care”, ou seja, não é um bloqueio pelo iCloud, verifiquei o imei, está limpo. Pensei em devolver o celular pra Apple, tenho quase certeza que foi roubado!! Estou perdido
  • Estatísticas do Fórum

    • Total de Tópicos
      50.243
    • Total de Posts
      425.421
×
×
  • Criar Novo...