Como gerenciar a memória para você ios

Tão poderoso como é, o iPhone - e até mesmo o iPad - são limitados em recursos, e o mais crítico desses recursos para iOS é a memória. Para compreender verdadeiramente como gerenciar memória corretamente em seu aplicativo, você precisa entender como a memória iOS funciona.

Video: Liberação de Espaço / Limpeza Memória Cache app iOS iPhone

gerenciamento de memória

Sempre que você (ou um objeto quadro) criar um objeto usando Objective-C, você alocar memória para o objeto. Embora os dispositivos iOS e do Mac todo o uso que é conhecido como memória virtual, ao contrário do Mac, memória virtual no iOS é limitado à quantidade real de memória física. Então, quando ele começa a ficar com pouca memória, o Gerenciador de Memória libera páginas de memória que contêm conteúdo somente leitura (como código).

Video: Como Gerenciar o Espaço no iPhone de forma Simples - Aprenda a Liberar Espaço

Desta forma, tudo o que tem a fazer é carregar os “originais” de volta na memória quando eles são necessários. Em contraste com o que o Mac faz, iOS não armazena temporariamente memória “mutável” (tais como dados de objeto) para o disco para espaço livre e, em seguida, ler os dados de volta mais tarde, quando ela é necessária. Este estado de coisas limita a quantidade de memória disponível.

Então, como você pode ver, quando um objeto é feito usando a memória, é fundamental que a memória ser liberada para uso por outros objetos.

Se a memória continua a ser limitada, o sistema também pode enviar notificações para o aplicativo em execução, pedindo-lhe para libertar memória adicional. Este é um dos eventos importantes que todos os aplicativos deve responder.

Em Objective-C, a memória é gerenciada em aplicativos iOS por contagem de referência - manter o sistema up-to-date sobre se um objeto está sendo usado atualmente. Continue lendo para todos os detalhes.

contagem de referência

Na verdade, gerenciamento de memória é simplesmente um exercício de contagem. Cada objeto tem sua própria contagem de referência, ou manter a contagem, que é o número de outros objectos que estão actualmente a utilizar o objecto. Enquanto a contagem de reter é maior do que zero, o gerenciador de memória assume que alguém se preocupa com esse objeto e deixa-lo sozinho.

Quando um objeto de manter a contagem chega a zero, o gerenciador de memória sabe que ninguém precisa mais e envia o objeto de um dealloc mensagem, e depois disso, sua memória é devolvido ao sistema para ser reutilizado.

Esse processo parece bastante simples, mas como é que a contagem de reter se incrementado e diminuído? Até Xcode 4.2 e iOS 5.0, você tem que gerir a contagem de reter em seu aplicativo. Quando um objeto é criado através alloc ou Novo ou através de um cópia de ou muteableCopy mensagem, manter a contagem do objeto é definido como 1.



Quando seu aplicativo usa um desses métodos, a propriedade é transferida para o objeto que enviou a mensagem - ou seja, o objeto foi retido e esse objeto que enviou a mensagem torna-se uma licença não exclusiva proprietário do objecto. Propriedade aqui significa que o objeto vai estar lá para usar até que seja explicitamente liberado, enviando-lhe uma mensagem quando ele não é mais necessário.

Antes Xcode 4.2 e iOS 5.0, se você não criar um objeto por um desses métodos, mas que queria se tornar um proprietário, assegurando desse modo que o objeto ficou em torno de você use até que você foram feito com ele, foi-se -lhe para enviar uma reter mensagem para aumentar a contagem de reter, e quando foram feitas, para enviar uma lançamento mensagem.

Este foi porque o criador do objeto (o que causou a contagem a ser definido como 1 reter) pode ter autoreleased-lo - enviou um objeto uma mensagem de liberação que fará com que ele seja liberado mais tarde (normalmente a próxima vez que o loop de execução é inserida) .

Isso é útil em situações em que você deseja abdicar da propriedade de um objeto, mas evitar a possibilidade de ser desalocada imediatamente (por exemplo, quando você retorna um objeto de um método). Em ambos os casos, você estava mantendo um ponteiro para o objeto para que ele poderia ser usado.

Video: Aprenda a limpar o WhatsApp para liberar espaço de armazenamento no iPhone

Embora esta abordagem era simples na teoria, era uma verdadeira dor de cabeça para os programadores. A grande maioria das falhas no sistema ocorreu porque aplicativos ficou sem memória e foram fechadas pelo sistema. Em alguns destes casos, o aplicativo não responder aos métodos de alerta de memória e gerenciar os avisos de pouca memória.

Na maioria das vezes, no entanto, mesmo se o aplicativo respondeu aos avisos de pouca memória, foi limitado ao que poderia fazer, porque a memória foi vazada. A memória era realmente disponível porque alguns objetos não estavam sendo usados, mas a memória desses objetos não tinha sido liberado de volta para o sistema. Não houve mais longos ponteiros para esses objetos, então eles não podia ser liberado e, em seguida, desalocadas ea memória reutilizados.

Desenvolvedores tiveram uma série de maneiras de gerenciar memória automaticamente. Um é coleta de lixo, que varre através de memória e libera os objetos que não têm ponteiros para eles.

A coleta de lixo para Objective-C, disponível na Mac, mas a coleta de lixo tem alguns problemas. Pode iniciar e parar seus aplicativos no momento mais inoportuno, e isso afeta o desempenho e a experiência do usuário, porque você não tem controle, ou qualquer idéia, quando isso vai ocorrer. Ele nunca foi implementado no iOS e está obsoleta começando com OS X 10.8 (Mountain Lion).

Ter que fazer todo esse gerenciamento de memória em seu aplicativo mudou com as últimas versões do compilador Objective-C, que agora vem com contagem de referência automático (ARC), que é ativado por padrão quando você cria um projeto. ARC faz para você no compilador que você costumava ter que fazer por conta própria. Ele manipula todos aqueles lançamentos, disparo automáticoareia reters para você.


Publicações relacionadas