gpt4 book ai didi

iphone - 在 iOS 中查看内存使用情况

转载 作者:IT王子 更新时间:2023-10-29 07:46:11 28 4
gpt4 key购买 nike

有什么方法可以查明 iOS 中有多少可用内存?我知道当可用内存不足时,系统会发出内存不足警告。然而,我的应用程序有一些点,单个线程会执行复杂的任务,有时该任务会占用足够的内存,以至于它刚刚被操作系统终止(我的应用程序可以从互联网上下载图片,我将它们缩小到一个小的size ... 如果用户下载了一个非常大的图像,我的应用程序会耗尽内存,然后就会“噗”一声。

让 App 自发终止显然是一种糟糕的用户体验。

有什么方法可以让我发现内存即将耗尽并停止任务吗?

我想我可以将任务放在一个单独的线程上,也许系统会向主线程发送低内存警告,但这看起来相当复杂,甚至不能保证工作。

谢谢!罗恩

最佳答案

在使用 XCode 测试和调试您的应用时,您可以使用此 logMemUsage() 函数对已用/可用空间进行 NSLog 记录,并在您测试应用时观察运行情况。此函数记录任何使用量 > 100kb 的变化。它像这样输出到调试日志(在模拟器上可用空间很大):

2011-11-02 21:55:58.928 hello[971:207] Memory used 21884.9 (+21885), free 1838366.8 kb
2011-11-02 21:55:59.936 hello[971:207] Memory used 28512.3 (+6627), free 1830809.6 kb
2011-11-02 21:56:01.936 hello[971:207] Memory used 28803.1 ( +291), free 1830129.6 kb
2011-11-02 21:56:02.936 hello[971:207] Memory used 29712.4 ( +909), free 1830142.0 kb

您决定在您的应用中调用 logMemUsage 的位置。我碰巧有一个每秒由计时器调用的函数,所以我把它放在那里。我建议围绕这些使用 #ifdef,以便此代码仅包含在调试版本中。

#import "mach/mach.h" 

vm_size_t usedMemory(void) {
struct task_basic_info info;
mach_msg_type_number_t size = sizeof(info);
kern_return_t kerr = task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t)&info, &size);
return (kerr == KERN_SUCCESS) ? info.resident_size : 0; // size in bytes
}

vm_size_t freeMemory(void) {
mach_port_t host_port = mach_host_self();
mach_msg_type_number_t host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t);
vm_size_t pagesize;
vm_statistics_data_t vm_stat;

host_page_size(host_port, &pagesize);
(void) host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size);
return vm_stat.free_count * pagesize;
}

void logMemUsage(void) {
// compute memory usage and log if different by >= 100k
static long prevMemUsage = 0;
long curMemUsage = usedMemory();
long memUsageDiff = curMemUsage - prevMemUsage;

if (memUsageDiff > 100000 || memUsageDiff < -100000) {
prevMemUsage = curMemUsage;
NSLog(@"Memory used %7.1f (%+5.0f), free %7.1f kb", curMemUsage/1000.0f, memUsageDiff/1000.0f, freeMemory()/1000.0f);
}
}

关于iphone - 在 iOS 中查看内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7989864/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com