【问题标题】:iPhone app crashes before memory warning eventiPhone应用程序在内存警告事件之前崩溃
【发布时间】:2011-11-03 16:56:51
【问题描述】:

应用程序由于内存开销而崩溃,但 applicationDidReceiveMemoryWarning 事件没有及时引发。 (我确切知道崩溃的原因是内存不足,因为它在加载资源时崩溃并且没有相应的崩溃报告,并且XCode没有中断调试,应用程序静默退出跳板)。

所以我正在寻找一些方法来防止这种开销。也许有一个函数或工具可以提供大量可用内存?

【问题讨论】:

  • 所以没有错误的访问警告?该应用程序刚刚退出?你在装什么这么大?需要有关您的项目的更多信息,但我的猜测是没有理由像这样一次加载所有内容。
  • 如果您的资源加载是在主线程上的一个方法中按顺序完成的,它将阻塞主线程并阻止您的应用程序接收 applicationDidReceiveMemoryWarning,这就是您看不到的原因。
  • 布拉德,罗伯特,谢谢您的回答。决定如何解决问题就足够了。詹姆斯,我正在为游戏加载纹理,使用经典场景:从文件中读取所有处理程序并在一个 init 方法中加载所有资源。

标签: iphone crash memory-warning


【解决方案1】:

在仪器(分配)中运行它并在之前和之后捕获堆的快照。

【讨论】:

    【解决方案2】:

    Robert Harvey 链接中的答案:

    #import <mach/mach.h>
    #import <mach/mach_host.h>
    
    +(natural_t) get_free_memory {
    mach_port_t host_port;
    mach_msg_type_number_t host_size;
    vm_size_t pagesize;
    host_port = mach_host_self();
    host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t);
    host_page_size(host_port, &pagesize);
    vm_statistics_data_t vm_stat;
    if (host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size) != KERN_SUCCESS) {
    NSLog(@"Failed to fetch vm statistics");
    return 0;
    }
    /* Stats in bytes */
    natural_t mem_free = vm_stat.free_count * pagesize;
    return mem_free;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-08
      • 2011-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      相关资源
      最近更新 更多