Publicado por: webclaudio | 30/03/2009

Curso de programação para IPHONE – Parte 7

Métodos do iPhoneOS

Olá programadores. Neste post iremos aprender sobre criação de objetos, gerenciamento de memória, eventos, delegates e data sources. Isto visto pelo comportamento do iPhone OS.

Como você viu no capítulo anterior, o iPhoneOS tem uma complexa e profunda estrutura de classes. Duas das mais importantes são NSObject e UIResponder, que contêm muitos dos métodos e propriedades que você vai usar em toda a sua programação. Graças à herança, essas importantes funções (e outras) podem ser utilizadas por diversos objetos no iPhone OS.
Nós vamos cobrir alguns destes métodos fundamentais aqui para apresentar uma única referência para o seu uso, mas esteja certo que nós vamos falar deles novamente quando nos deparamos para pela primeira vez com esses métodos em futuro capítulos.

CRIAÇÃO DE OBJETOS

Já anteriormente falamos como definir classes, mas, como nós dissemos às vezes as especificidades de como instâncias de objetos são criados a partir de classes dependem da estrutura de seu framework. No iPhoneOS é o NSObject que define como a criação do objeto trabalha. Você tem que satisfazer algumas diferentes interfaces que são utilizadas para apoiar a criação do objeto, mas todos eles, em última instância, são definidos em dois passos que utilizam o método de classe alloc e a instância de método init. O método alloc aloca a memória para o seu objeto e, em seguida, retorna o próprio objeto. O método init então configura algumas variáveis iniciais do método. Eles ocorrem normalmente através de uma única, aninhada mensagem:

id novoObjeto = [[objetoDeClasse alloc] init];


O método Alloc da classe NSObject deve sempre fazer a coisa certa para você. Contudo, quando você escrever uma nova subclasse você quase sempre vai escrever um novo método init, porque é ali onde você define as variáveis que tornam a sua classe o que ela é. Abaixo, mostro uma configuração padrão para um init, que seria exibido como parte do seu @implementation

exemplo42

Este código mostra todas as exigências habituais de um método init. Primeiro, ele chama o seu método pai (1) para iniciar a sua classe habitual de inicialização. Em seguida, põe-se qualquer instância de variável que deva ser criada (2). Por fim, ele retorna o objeto, geralmente com “return self”(3).

Este formato de Init é apenas uma das muitas maneiras que você pode usar para criar objetos no iPhone OS.

O ARGUMENTO ALTERNATIVO

Às vezes você deseja enviar um argumento junto com um init. Você pode fazer isso com uma inicialização de função que você nomeia usando o formato initWithArgument:. Exceto o fato de que você está lhe enviando um argumento, funciona exatamente como o código do init anterior. Aqui está outro exemplo extraída de código real que veremos nos próximos capítulos:

[[UITextView alloc] initWithArgument: argumento];

Métodos de Inicialização com argumentos  permitem que você crie objetos atípicos, criados da maneira que você escolher. Eles são bastante comuns na UIKit (Classe de interface com o usuário). Um método de inicialização com um argumento que merece mencionar é o initWithCoder: é um método especial de inicialização que é chamado sempre que você criar um objeto com o Interface Builder, e, portanto, ele é importante se você deseja fazer configurações nestes objetos.

O MÉTODO FACTORY ALTERNATIVO

Um último tipo de init apoiada através do iPhone OS é o método factory. Este é criado através de uma mensagem que cuida tanto da alocação de memória quanto para a inicialização. Todos os métodos factory são nomeadas com o formato objecttypeWithArgument:. Aqui está outro exemplo real:

[UIButton buttonWithType:UIButtonTypeRoundedRect];

Os métodos da classe factory se fazem um pouco mais claras, mas eles também têm a vantagem de cuidar da gestão de memória para você, que é o tema da nossa próxima categoria principal dos  métodos do iPhoneOS.

RESUMO DE CRIAÇÃO DE OBJETOS

resumoobjetos

GERENCIAMENTO DE MEMÓRIA

Devido à limitações de potência, o iPhoneOS não suporta coleta (Garbage Collector – coletor de lixo). Isso significa que cada objeto que é criado deve finalmente ter a sua memória liberada na mão, pelo menos, se você não pretende introduzir um vazamento de memória em seu programa. A regra fundamental da gestão de memória no iPhoneOS é esta: se você alocar a memória de um objeto, você deve liberá-lo. Isto é feito através de uma mensagem de liberação(o que é mais uma vez, herdado do NSObject):

[objeto liberação];

Você enviará essa mensagem quando não utilizar mais seu objeto. Fazendo isso,  você fez o seu dever, como um bom programador. Note que eu disse que você só deve liberar a memória se você atribuíu a memória para ele. Se você olhar para trás para os métodos da classe factory que falámos no seção anterior, você verá que nós realmente não alocamos a memória para eles (porque não enviamos qualquer mensagem alloc), o que significa que não somos responsáveis por disponibilizá-la. Em vez disso, o objeto de classe que realmente fez a criação tem de limpar a sua memória. Como o sistema operacional sabe quando terminei de trabalhar com o objeto criado? Isso é feito através do maravilhoso autorelease.

O AUTORELEASE ALTERNATIVO

Se você é responsável pela criação de um objeto e que vai passá-la para fora para algumas outras classes de uso, você deve autorelease o objeto antes de enviá-la. Isto é feito com o método autorelease:

[objeto autorelease];

Em geral, você irá enviar a mensagem autorelease mesmo antes de devolver o objeto no final de um método. Quando um objeto sofre um autorelease, é supervisionado por uma especial  classe NSAutoreleasePool. O objeto é mantido vivo para o escôpo do  do método que o chamou e, em seguida, o NSAutoreleasePool o libera.

RETENDO E CONTANDO

Então como fazer, se quiser manter um objeto que tenha sido passado para você, e que  vai sofrer um autorelease? Nesse caso,  lhe enviamos uma mensagem retain (reter):

[objeto retain];

Quando você fizer isso, você está dizendo que você deseja ao objeto para ficar por perto, mas agora você irá se tornar responsável pela sua memória então: você deve enviar uma mensagem de release em algum ponto para manter o seu equilíbrio de memória.

Neste ponto, nós provavelmente devemos voltar e explicar a forma subjacente de que o iPhoneOS efectivamente gera a memória destes objetos. Ele o faz através da manutenção de uma contagem de objetos em uso. Por padrão, é definido como 1. Cada mensagem alloc e retain  incrementam o contador em 1, e cada mensagem de release reduz a contagem de 1. Quando a contagem cai para 0 (zero), a memória para o objeto é liberada. Portanto, toda a gestão de memória pode ser pensada como pares de mensagens. Se você equilíbrar cada alloc e retain com um release, o seu objeto será eventualmente liberado quando tiver terminado usá-lo.

RESUMO DOS MÉTODOS DE GERENCIAMENTO DE MEMÓRIA

resumomemoria

EVENTO RESPONSE

Segue a última categoria de métodos que iremos analisar para o iPhoneOS é o evento response (resposta). Ao contrário da criação de objeto e gestão de memória, vamos apenas abordar esta questão rapidamente, porque muito melhor documentado em um próximo post. O tema é tão importante que queremos por agora oferecer uma visão geral rápida por enquanto.

Existem três formas principais, que podem aparecer em eventos do iPhone: através de chamadas de eventos simples (ou actions  – ações), através de delegações de eventos, ou através de notificação.

Apesar dos métodos de todos os nossos tópicos anteriores serem derivados da classe NSObject, o evento response do iPhone vem do objeto UIResponder, enquanto uma notificação provém do NSNotificationCenter.

Você não precisa se preocupar em como acessar o método response e suas propriedades. Como o UIResponder,  eles herdam da classe UIKit, mas o NSNotificationCenter exigirá acesso especial.

Este capitulo será atualizado ainda esta semana. Pois ainda falta explicar melhor isto.

E por enquanto é só.  No próximo capitulo vamos começar já com o XCODE. Abraços.

Anúncios

Responses

  1. Muito bom. Este material tá show. E estou aguardando pra testar tudo isto no XCode. Valeu.

  2. legal. quando vamos começar no XCODE ?

    • Nesta Sexta Dia 10/04/2009 – Estou tentando fazer também um vídeo.

  3. Show de bola seu material… já consigo fazer os primeiros programinhas no iPhone… agora eestou tentando usar mais de uma view mas não sei como fazer…terias como me passar um exemplo prático de uso de mais de uma view? Se vc tiver e puder é claro!

    Obrigado!

    • Valeu Gustavo. Cara, vou começar nessa Sexta-feira santa a falar do Xcode e das views. Tentarei adiantar o suficiente para chegar ao controle de várias views. Terei esses três dias todos para arrebentar e fazer vocês ficarem mais entusiasmados ainda.

  4. Show de bola Cláudio !

  5. Cara MUito BOm !!!!!! Continua assim dei uma olhada no seu blog e foi o unico lugar da net que consegui achar que da uma explicação em portugues decente. Valeu Legal.

  6. Meu, parabéns pelo tutorial!!
    Está me ajudando pracaraka! Valeu mesmo!


Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Categorias

%d blogueiros gostam disto: