Pergunta

Estou carregando uma série de UIViews em um UIScrollView e estou tentando rastrear por que eles estão usando tanta memória. Após um processo de eliminação usando instrumentos, descobri que definir a cor de fundo das visualizações aumenta o uso da memória em 4 vezes.

Se eu não definir a cor de fundo, o uso da memória fica em torno de 4,5 megs. Assim que eu defino a cor de fundo para qualquer coisa redcolor ou transparente, o uso da memória salta para 17 megs.

Aqui está o código:

ThumbnailView *thumbView = [[ThumbnailView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 225.0f, 320.0f)];
thumbView.tag = aCounter;
thumbView.backgroundColor = [UIColor clearColor];

Alguem sabe o que poderia estar causando isso?

O que estou realmente depois é ter o fundo claro. Se não houver maneira de contornar isso, há outra maneira de definir o plano de fundo de um uiview para ficar claro?

Foi útil?

Solução

Todas as instâncias do UIVIEW (e classes derivadas) têm um objeto de calayer associado (acessado através da propriedade da camada) que fornece a aparência visual do UIView. A calayer pode ter seu próprio bitmap, ele pode compartilhar um bitmap com outro objeto de calayer (que é como as reflexões são feitas), ou não pode ter bitmap.

Quando um UIView atua como um contêiner para outros controles, ele não possui bitmap associado à sua camada, portanto, ele usa muito pouca memória. Assim que você definir sua cor de fundo, esse bitmap de apoio deve ser criado para que haja algo a renderizar. Se a subclasse UIView implementar o Drawrect para atrair alguns gráficos para a vista, a mesma coisa acontecerá.

Como uma exibição em tamanho grande consome muita memória, quando você implementa uma solução baseada em UIScrollView, você deve carregar apenas as visualizações exibidas e as duas lados. Não crie muitos deles com antecedência.

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