亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

以編程方式檢索iPhone上的內存使用情況

以編程方式檢索iPhone上的內存使用情況

iOS
MMMHUHU 2019-08-03 07:03:43
以編程方式檢索iPhone上的內存使用情況我正在嘗試檢索我的iPhone應用程序在任何時候以編程方式使用的內存量。是的,我知道Objectalloc/泄漏。我對這些并不感興趣,只是想知道是否有可能編寫一些代碼,獲取所使用的字節數并通過NSLog報告它。
查看完整描述

3 回答

?
忽然笑

TA貢獻1806條經驗 獲得超5個贊

要獲取應用程序正在使用的實際內存字節,您可以執行如下示例所示的操作。但是,您確實應該熟悉各種分析工具,以及它們的設計,以便更好地了解總體的使用情況。

#import <mach/mach.h>// ...void report_memory(void) {
  struct task_basic_info info;
  mach_msg_type_number_t size = TASK_BASIC_INFO_COUNT;
  kern_return_t kerr = task_info(mach_task_self(),
                                 TASK_BASIC_INFO,
                                 (task_info_t)&info,
                                 &size);
  if( kerr == KERN_SUCCESS ) {
    NSLog(@"Memory in use (in bytes): %lu", info.resident_size);
    NSLog(@"Memory in use (in MiB): %f", ((CGFloat)info.resident_size / 1048576));
  } else {
    NSLog(@"Error with task_info(): %s", mach_error_string(kerr));
  }}

Virtualsize結構中還有一個字段,它將為您提供可用的虛擬內存(或分配給您的應用程序的內存在任何情況下都是潛在的虛擬內存)的字節數。PGB鏈接到的代碼將給出設備可用的內存量以及它是什么類型的內存。




查看完整回答
反對 回復 2019-08-05
?
慕桂英3389331

TA貢獻2036條經驗 獲得超8個贊

標頭TASK_BASIC_INFO說:

/* Don't use this, use MACH_TASK_BASIC_INFO instead */

以下是使用MACH_TASK_BASIC_INFO:

void report_memory(void){
    struct mach_task_basic_info info;
    mach_msg_type_number_t size = MACH_TASK_BASIC_INFO_COUNT;
    kern_return_t kerr = task_info(mach_task_self(),
                                   MACH_TASK_BASIC_INFO,
                                   (task_info_t)&info,
                                   &size);
    if( kerr == KERN_SUCCESS ) {
        NSLog(@"Memory in use (in bytes): %u", info.resident_size);
    } else {
        NSLog(@"Error with task_info(): %s", mach_error_string(kerr));
    }}




查看完整回答
反對 回復 2019-08-05
?
手掌心

TA貢獻1942條經驗 獲得超3個贊

下面是為了快速顯示NSLog()中的泄漏狀態而增強的Report_Memory()。

void report_memory(void) {
    static unsigned last_resident_size=0;
    static unsigned greatest = 0;
    static unsigned last_greatest = 0;

    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);
    if( kerr == KERN_SUCCESS ) {
        int diff = (int)info.resident_size - (int)last_resident_size;
        unsigned latest = info.resident_size;
        if( latest > greatest   )   greatest = latest;  // track greatest mem usage
        int greatest_diff = greatest - last_greatest;
        int latest_greatest_diff = latest - greatest;
        NSLog(@"Mem: %10u (%10d) : %10d :   greatest: %10u (%d)", info.resident_size, diff,
          latest_greatest_diff,
          greatest, greatest_diff  );
    } else {
        NSLog(@"Error with task_info(): %s", mach_error_string(kerr));
    }
    last_resident_size = info.resident_size;
    last_greatest = greatest;}




查看完整回答
反對 回復 2019-08-05
  • 3 回答
  • 0 關注
  • 382 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號