Pergunta

Fui aprendendo a desenvolver aplicações na plataforma Cocoa Touch. Eu tenho um longo caminho, mas uma peça que eu não posso envolver minha cabeça em torno é o gerenciamento de memória.

Eu pensei em tomar uma rota de comparação em vez de tentar começar do zero. Eu não consigo encontrar muito sobre a diferença entre o CLR (.net) e Objective-C 2.0, então eu estou querendo saber se a comunidade de estouro de pilha pode me ajudar com essa questão.

Quais são os principais / diferenças importantes no gerenciamento de memória entre Objective-C 2.0 eo CLR? Com relação ao Objective-C 2.0, estou desenvolvendo no iPhone OS e a funcionalidade disparo automático é desencorajado.

Eu acho que eu estou procurando uma comparação dos dois ... Desde que eu estou vindo de um fundo .NET, o que poderia ser coisas que eu preciso de saber sobre C-Objective gerenciamento de memória 2.0?

Obrigado a todos!

Foi útil?

Solução

O CLR é executado em uma máquina virtual; toda a desalocação de objetos são manipulados pelo sistema de coleta de lixo. Geralmente na memória Objective-C devem ser gerenciados manualmente, quer através de velho estilo C malloc / livre ou através do sistema de contagem de referência de reter / release. Se você vem de um fundo padrão "C", a técnica não vai parecer muito estranho.

Com a contagem de referência, as contagens do sistema quantas vezes um determinado objeto é usado - isto é basicamente o "reter" mencionado acima. Quando algo é feito usando um objeto que o objeto é manualmente enviar uma mensagem "release", que diminui o objeto de manter a contagem de 1. Quando a contagem chegar a 0, o sistema desaloca automaticamente o objeto. Isso vai parecer extremamente complicado em comparação com o CLR / NET, mas esse mecanismo oferece melhor desempenho e mais controle.

Se você estiver codificação em Objective-C 2.0 no Macintosh, você está na sorte, desde a coleta de lixo pode ser ativado através de uma opção no XCode. Este será mais perto do que o CLR fornece. Se você estiver desenvolvendo no iPhone, coleta de lixo custa muito caro em termos de memória e CPU, então não é uma opção. A memória deve ser gerenciado manualmente.

Felizmente, há uma in-between opção que é comumente usado por enviar e mensagem "disparo automático" para um objeto. Este mecanismo, incluído no Macintosh e do iPhone, basicamente piscinas alocados objetos em um dicionário global (sua realmente chamado de uma piscina disparo automático). Ou quando a aplicação existe ou quando a piscina é drenada, os objetos são então de-alocado. No entanto, nem tudo vai para a piscina disparo automático, nem que você quer colocar tudo lá. Eu recomendo a seca, mas a leitura importante do Objective-C 2.0 Linguagem de programação a partir do site da Apple que vai para muito mais detalhes.

http://developer.apple.com/documentation /Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html

Boa sorte e ter paciência. Objective-C não é um novo garoto sobre o bloco como .Net (seus mais de 25 anos de idade), mas tem algumas características incríveis que .Net só agora está começando a incorporar.

Outras dicas

No iPhone é manual. Se você alocar ou manter a memória você deve liberá-lo.

No .NET CLR você não se importa como a memória é ou o objeto fazer com ele em sua maior parte.

Para o iPhone que você precisa para equilibrar cada alocação de objeto, o init ou manter com autorização. À medida que o iPhone usa um mecanismo de contagem de referência simples, uma vez que a contagem cai para 0, o objeto irá se limpar.

Uma coisa que eu precisava para se acostumar com é que você pode ter uma propriedade que automaticamente faz um reter, por isso, se você cria um objeto, em seguida, atribuí-lo à propriedade terá uma contagem de 2. O que funciona melhor é criar o objeto para um atribuir variável temp para a propriedade, em seguida, solte a variável TEMP para obter a contagem regressiva para 1.

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