Aprenda Objective-C

  • Página Inicial
  • Contato!
  • Tudo sobre Objective-C Parte 1!
  • Tudo sobre Objective-C Parte 2!
  • Tudo sobre Objective-C Parte 3!
  • Tudo sobre Objective-C Parte 4!
  • Tudo sobre Objective-C Parte 4

    Structs

    As structs funcionam exatamente da mesma forma que em C. Veja um exemplo:

    
    struct endereco {
        char rua[50];
        int numero;
        long int cep;
        char bairro[30];
    };
    
    int main(int argc, const char *argv[]) {
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    
        struct endereco novo;
    
        printf("Digite a rua: ");
        fgets(novo.rua, 50, stdin);
        printf("Digite o número: ");
        scanf("%d", &novo.numero);
        printf("Digite o CEP: ");
        scanf("%ld", &novo.cep);
        printf("Digite o bairro: ");
        fflush(stdin);
        scanf("\n");
        fgets(novo.bairro, 30, stdin);
    
        NSLog(@"Rua: %s", novo.rua);
        NSLog(@"Número: %d", novo.numero);
        NSLog(@"CEP: %ld", novo.cep);
        NSLog(@"Bairro: %s", novo.bairro);
    
        [pool drain];
    
        return 0;
    }
    
    

    PS: Podemos usar também, no lugar de struct, union (que ocupam menos espaços, mas usam o mesmo endereço de memória), veja um exemplo:

    
    union exemplo {
        int inteiro;
        char caractere;
    };
    
    

    Enum

    As enums também são utilizadas de forma idêntica à do C, como podem ver:

    
    typedef enum {pito = 1, duque, terno, quadra, quina, sena} domino;
    
    int main(int argc, const char *argv[]) {
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    
        domino dados = pito;
    
        printf("Digite o número do dado: ");
        scanf("%d", &dados);
    
        if(dados >= pito && dados <= sena) {
            switch(dados) {
                case pito:
                    NSLog(@"%d - Pito", dados);
                    break;
                case duque:
                    NSLog(@"%d - Duque", dados);
                    break;
                case terno:
                    NSLog(@"%d - Terno", dados);
                    break;
                case quadra:
                    NSLog(@"%d - Quadra", dados);
                    break;
                case quina:
                    NSLog(@"%d - Quina", dados);
                    break;
                case sena:
                    NSLog(@"%d - Sena", dados);
                    break;
            }
        }
        else {
            NSLog(@"Dado Inválido!");
        }
    
        [pool drain];
    
        return 0;
    }
    
    

    PS: Caso não inicialize o primeiro item do enum, ele receberá o valor 1.

    Podemos também correr os itens do enum num loop:

    
    int i;
    for(i = pito; i <= sena; i++) {
        NSLog(@"%d", dados);
        dados++;
    }
    
    

    Escrevendo e Lendo Arquivos

    Para escrever arquivos em Objective-C, podemos fazer assim:

    
    char entr[50];
    
    printf("Digite algo pra adicionar no arquivo: ");
    fgets(entr, 50, stdin);
    
    NSFileManager *gerenc = [NSFileManager defaultManager];
    
    NSString *text = [[NSString alloc] initWithUTF8String: entr];
    NSData *dados = [text dataUsingEncoding: NSUTF8StringEncoding];
    
    [gerenc createFileAtPath: @"arquivo.txt" contents: dados attributes: nil];
    
    

    Só que, caso o arquivo já exista, ele sobrescreverá o que está escrito. Para ele não sobrescrever, faça assim:

    
    char entr[50];
    
    printf("Digite algo pra adicionar no arquivo: ");
    fgets(entr, 50, stdin);
    
    // Esse modo não cria novo arquivo:
    NSFileHandle *arquivo;
    NSMutableData *dados;
    
    dados = [NSMutableData dataWithBytes: entr length: strlen(entr)];
    arquivo = [NSFileHandle fileHandleForUpdatingAtPath: @"arquivo.txt"];
    
    [arquivo seekToFileOffset: 10];
    [arquivo writeData: dados];
    [arquivo closeFile];
    
    

    Para ler também é simples:

    
    NSString *arquivo = [NSString stringWithContentsOfFile: @"arquivo.txt"];
    
    NSLog(@"%@", arquivo);
    
    

    Argumentos para main, argc e argv

    Quando usamos passagem de parâmetros para a função main, podemos chamar um programa através do terminal pelo nome, podendo enviar um valor, que pode ser tratado dentro do programa através de dois parâmetros, argc e argv, na função main.

    A int argc guarda a quantidade de parâmetros informados (1, 2, 3, etc), e a char *argv[] é um array que serve como ponteiro para a matriz de caracteres que armazena os argumentos.

    Veja um exemplo de programa que receberá um parâmetro (rodando pelo terminal):

    
    #import <Foundation/Foundation.h>
    
    int main(int argc, const char *argv[]) {
        int cont = 1;
    
        NSLog(@"Argumentos: %d", argc);
    
        while(cont < argc) {
            NSLog(@"Parâmetro Nº%d: %s", cont, argv[cont]);
            cont++;
        }
    
        return 0;
    }
    
    

    PS: O primeiro argumento sempre é o nome do programa, que é exibido quando não é passado nenhum outro argumento.

    Assim podemos chamar o programa pelo terminal passando um parâmetro com o nome do programa. E podemos passar outros parâmetros junto com o programa. Isso é útil para programas como navegadores.