Pergunta

Bem, eu comecei com a programação do iPod/iPhone usando o principal desenvolvimento do iPhone (O'Reilly) e estou digitando código fora do livro. Existem dois problemas, um está relacionado à programação e o outro não.

  • Não entendo o formato dos métodos Objective-C. Estou recebendo alguns erros agora, com base no código -fonte do livro. O que me leva à minha próxima edição.

  • Parte do código é buggy. Acho que sim, porque não conseguia fazer o código para executar sem modificá -lo. O livro tem alguns erros de digitação no texto, pois é uma primeira edição e outros enfeites, mas minha "consertando" o código tem a ver com isso?

Então... Para onde posso aprender mais sobre os métodos Objective-C e como eles funcionam em termos de estrutura e para onde vão o tipo de retorno e os argumentos?

Para aqueles com o livro, estou no meio do aplicativo Instatweet no início.

Obrigado.

Foi útil?

Solução

Talvez uma comparação entre um idioma "Ci-Like" e OBJ-C seja útil-vamos com Java. Imagine uma classe de retângulo com um método de contratragem de contratempo. Assumiremos que temos uma instância de retângulo chamado Rect.

Em Java, a assinatura do método provavelmente seria

public void setBackgroundColor(int r, int g, int b) { ... }

No Objective-C, os argumentos fazem parte da assinatura do método, então pode ser

- (void)setBackgroundColorWithRed:(int)r green:(int)g blue:(int)b;

O "-" significa que é um método de instância na classe Retângulo. (void) é do tipo de retorno do método. Então veem os argumentos. Cada cólon define um argumento, que é digitado (cada arg é (int) neste exemplo).

Vamos comparar chamando esses métodos. Java:

rect.setBackgroundColor(255, 255, 0);

Obj-C:

[rect setBackgroundColorWithRed:255 green:255 blue:0];

Muitas pessoas tropeçam na sintaxe do OBJ-C-você não está sozinho. Espero que essa comparação deixe as coisas mais claras. Ele também exemplifica uma força linguística do Objective-C: na hora da chamada, fica claro quais são seus argumentos. Se eu estivesse lendo o código e visse o método Java sendo chamado, não seria óbvio que os argumentos são vermelhos, azuis e verdes. No OBJ-C, está dolorosamente claro que estamos definindo valores de cores individuais. É verdade que a maioria dos desenvolvedores pode adivinhar quais são os três argumentos para um método SetColor, mas os métodos mais complexos ficam confusos. Aqui está um método mais complexo definido em Java e Objective-C:

static Dog createDog(  String name
                     , int age
                     , boolean isNeutered
                     , String ownerName
                    );
+ (Dog *)createDogNamed:(NSString *)name 
     age:     (int)        age 
     neutered:(BOOL)       isNeutered 
     owner:   (NSString *) owner;

Na hora da chamada:

Dog.createDog("Fluffy", 2, true, "Moshe");
[Dog createDogNamed:@"Fluffy" age:2 neutered:YES owner:@"Moshe"];

O Objective-C é mais detalhado, mas muito mais legível. No exemplo do Java, não está muito claro o que significam os argumentos "2" e "verdadeiros". Objective-C quase se lê como o inglês.

Outras pessoas publicaram links para guias mais detalhados, mas espero que isso o faça além dos obstáculos sintáticos o suficiente para tornar os links úteis. Fico feliz em responder a perguntas mais específicas que você tem. Na minha experiência, os novatos do OBJ-C têm um momento muito difícil com a sintaxe, e então cliqueS e parece brilhante. Mantenha-se firme!

Outras dicas

A definição de um método Objective-C é bastante direta. É bem parecido com uma definição regular de chamada de função C, na verdade. A grande adição é a opção de nomear os parâmetros. Aqui está um exemplo:

-(int)addX:(int)x toY:(int)y
{
    return x + y;
}

Que você pode usar enviando uma mensagem para o objeto apropriado:

int z = [object addX:x toY:y];

Nesse caso, forneci os parâmetros e os argumentos os mesmos nomes, para deixar claro como as coisas se alinham. Você poderia fazer com a mesma facilidade:

int z = [object addX:4 toY:7];

E depois disso, z será 11.

Confira a Apple's Introdução ao objetivo C.

O formato do método básico é

-(ReturnType *)methodName:(VariableType *)variableName{

}

Por exemplo:

-(NSString *)giveMeANewStringFromAnOldString:(NSString *)oldString{

}

Você também deve verificar o site do livro para a Errata.

Eu fiz a mesma coisa que você fez. Também peguei o primeiro livro de desenvolvimento da cabeça do iPhone (cobrindo o 3.1 SDK).

Executei todos os tutoriais e encontrei apenas 1 erro que fez meu aplicativo não funcionar (fiz uma anotação no meu livro, mas não consigo encontrá -lo agora ...).

Então, depois disso, percebi que tinha exatamente o mesmo problema que você está tendo com a sintaxe.

Peguei "Programação no Objective-C 2.0", de Stephen G. Kochan. (É simplesmente brilhante.) O livro é claro e conciso. Eu nem cheguei a 25% do livro e todas as minhas perguntas foram respondidas.

O código de leitura Objetivo-C me jogou por meses porque estou tão acostumado a uma sintaxe diferente que meu cérebro demorou um pouco para se ajustar à maneira como o Objective-C espera.

O que estou encontrando é o código Objective-C se torna realmente legível quando você envolve seu cérebro em torno dele. O exemplo de Carl Norum acima é uma grande demonstração de legibilidade.

[object addX:4 toY:7];

Não fica muito mais legível do que isso!

Também alguma terminologia é um pouco diferente. "Mensagens de um objeto" vs "chamando um método" me jogou por algumas semanas também.

Espero que a recomendação do livro ajude você, isso realmente me ajudou muito.

Existem ótimos recursos de aprendizado na Apple:

Aprendizagem Objetivo-C: Um primer

e

Diretrizes de codificação para cacau

Boa sorte!

Ler Cacau (R) Programação para Mac (R) OS X (3ª edição), é a Bíblia para Mac e Cacau.

Eu não tive nenhum problema, mas lembre -se de que a API está sempre avançando para que possa haver pequenas atualizações/alterações. Mas não encontrei nada que me impedisse de terminar todos os exemplos e exercícios de código.

Este é o livro para ler.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top