iOS - 如何调用C函数?

sol*_*eil 1 c memory-management objective-c ios

我想用这个函数来帮助监控内存:

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);
}
Run Code Online (Sandbox Code Playgroud)

A.我在哪里将此功能放在我的Xcode项目中?

B.我怎么称呼它?显然我想设置连续监控内存.

das*_*ght 10

A.我在哪里将此功能放在我的Xcode项目中?

将定义放在单独的.c文件中,并在单独的头文件中声明.

PrintFreeMem.h

extern void print_free_memory();
Run Code Online (Sandbox Code Playgroud)

PrintFreeMem.c

#include "PrintFreeMem.h"
void print_free_memory() {
    // Your implementation
}
Run Code Online (Sandbox Code Playgroud)

B.我怎么称呼它?

在包含其头文件后,您可以按照调用常规C函数的方式调用它:

#include "PrintFreeMem.h"

-(void)myMethod {
    ...
    print_free_memory();
}
Run Code Online (Sandbox Code Playgroud)

  • +1我只会添加(如果有问题)是项目需要知道编译实现文件.当您使用Xcode"新文件"界面时,默认情况下会发生这种情况; 但是,万一它会给你一个链接错误,你需要将.c文件添加到你的应用程序的目标. (2认同)