2012-08-17 57 views
1

我想用這個功能來幫助監測內存:iOS - 如何調用C函數?

void print_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"); 

/* Stats in bytes */ 
natural_t mem_used = (vm_stat.active_count + 
         vm_stat.inactive_count + 
         vm_stat.wire_count) * pagesize; 
natural_t mem_free = vm_stat.free_count * pagesize; 
natural_t mem_total = mem_used + mem_free; 
NSLog(@"used: %u free: %u total: %u", mem_used, mem_free, mem_total); 
} 

A.我在哪裏,我的Xcode項目把這個功能?

B.我怎麼稱呼它?顯然我想設置爲連續監視內存。

+0

http://stackoverflow.com/questions/801976/mixing-c-functions-in- an-objective-c-class – janusbalatbat 2012-08-17 04:19:29

回答

10

A.我在哪裏把這個函數放在我的Xcode項目中?

將定義放在單獨的.c文件中,並將聲明放在單獨的頭文件中。

PrintFreeMem.h

extern void print_free_memory(); 

PrintFreeMem.c

#include "PrintFreeMem.h" 
void print_free_memory() { 
    // Your implementation 
} 

B.我怎麼稱呼呢?

你可以調用它,你經常打電話C函數的方式,包括它的頭文件後:

#include "PrintFreeMem.h" 

-(void)myMethod { 
    ... 
    print_free_memory(); 
} 
+2

+1只有我會添加的東西(萬一有麻煩)是項目需要知道編譯實現文件。這在使用Xcode「新文件」界面時默認會發生;但爲了防止出現鏈接錯誤,您需要將.c文件添加到您的應用程序的目標中。 – 2012-08-17 04:26:35

+0

謝謝。現在......這些數字意味着什麼? used:3655589888免費電話:631083008合計:4286672896?什麼? – soleil 2012-08-17 04:32:09

+1

@soleil我的猜測是這是字節數:它看起來像你的主機安裝了4G內存,並且目前使用的內存大約是3.6G。 – dasblinkenlight 2012-08-17 04:36:35

0

你可以做的聲明在頭文件,並寫入實現文件中此功能,或者你可以簡單地把功能實現文件中,但隨後的功能只能從線下方

print_free_memory(); 

稱爲希望這個工程