Estou tentando recuperar a quantidade de memória que meu aplicativo para iPhone está usando a qualquer momento, de maneira programática. Sim, estou ciente sobre ObjectAlloc / Leaks. Não estou interessado neles, apenas para saber se é possível escrever algum código e obter a quantidade de bytes que está sendo utilizada e reportar via NSLog.
Obrigado.
ios
objective-c
iphone
cocoa-touch
memory
Coocoo4Cocoa
fonte
fonte
Respostas:
Para obter os bytes reais de memória que seu aplicativo está usando, você pode fazer algo como o exemplo abaixo. No entanto, você realmente deve se familiarizar com as várias ferramentas de criação de perfil, pois elas foram projetadas para lhe dar uma imagem muito melhor do uso geral.
Também existe um campo na estrutura info.virtual_size que fornecerá o número de bytes de memória virtual disponível (ou memória alocada para seu aplicativo como memória virtual potencial em qualquer evento). O código vinculado ao pgb fornecerá a quantidade de memória disponível para o dispositivo e que tipo de memória é.
fonte
Os cabeçalhos para
TASK_BASIC_INFO
dizer:Aqui está uma versão usando
MACH_TASK_BASIC_INFO
:fonte
Aqui está report_memory () aprimorado para mostrar rapidamente o status do vazamento no NSLog ().
fonte
Isso foi testado no Xcode 11 no Mojave 10.4.6 em 01/07/2019.
Todas as respostas anteriores retornam o resultado incorreto .
Aqui está como obter o valor esperado escrito por Quinn da Apple “The Eskimo!”.
Isso usa a
phys_footprint
var deDarwin > Mach > task_info
e corresponde aproximadamente ao valor no medidor de memória no navegador de depuração do Xcode .O valor retornado está em bytes.
https://forums.developer.apple.com/thread/105088#357415
Segue o código original.
Modificar isso ligeiramente para criar um conjunto de métodos Swift em nível de classe permite o fácil retorno dos bytes reais e saída formatada em MB para exibição. Eu uso isso como parte de um conjunto UITest automatizado para registrar a memória usada antes e depois de várias iterações do mesmo teste para ver se temos algum vazamento ou alocação potencial que precisamos examinar.
Aproveitar!
Nota: um codificador empreendedor pode querer adicionar um formatador estático à classe para que
usedMBAsString
retorne apenas 2 casas decimais significativas.fonte
Solução rápida da resposta de Jason Coco :
fonte
Swift 3.1 (em 8 de agosto de 2017)
fonte
(1024*1024)
, não por1000000
, para obter megabytes de bytes.Aqui está uma versão do Swift 3:
fonte
Versão Objective-C:
fonte
Abaixo está a resposta correta:
`` `
`` `
fonte