Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何获得总使用内存_Ios_Swift - Fatal编程技术网

Ios 如何获得总使用内存

Ios 如何获得总使用内存,ios,swift,Ios,Swift,有人能帮我获取iPhone的总使用内存吗?我正在开发一个应用程序来查找iPhone的所有细节。我发现了2-3篇与这个问题相关的帖子,但它们要么是Obj-C,要么是另一种语言/语法。我一直在努力将obj-c代码更改为swift,但在这条路上的某个地方被卡住了 我正在努力 但在斯威夫特,一切看起来都不一样 此外,mach的语法也相当困难。有人能举个例子解释一下吗。我可以从这里得到所有的记忆信息 但是由于版权问题,我不能使用别人的作品。还有,从那里我什么也听不懂。给你。这将以字节为单位打印已用内存 v

有人能帮我获取iPhone的总使用内存吗?我正在开发一个应用程序来查找iPhone的所有细节。我发现了2-3篇与这个问题相关的帖子,但它们要么是Obj-C,要么是另一种语言/语法。我一直在努力将obj-c代码更改为swift,但在这条路上的某个地方被卡住了

我正在努力 但在斯威夫特,一切看起来都不一样

此外,mach的语法也相当困难。有人能举个例子解释一下吗。我可以从这里得到所有的记忆信息
但是由于版权问题,我不能使用别人的作品。还有,从那里我什么也听不懂。

给你。这将以字节为单位打印已用内存

var info = mach_task_basic_info()
var count = mach_msg_type_number_t(MemoryLayout<mach_task_basic_info>.size)/4

let kerr: kern_return_t = withUnsafeMutablePointer(to: &info) {
    $0.withMemoryRebound(to: integer_t.self, capacity: 1) {
        task_info(mach_task_self_,
                  task_flavor_t(MACH_TASK_BASIC_INFO),
                  $0,
                  &count)
    }
}

if kerr == KERN_SUCCESS {
    print("Memory in use (in bytes): \(info.resident_size)")
}
else {
    print("Error with task_info(): " +
        (String(cString: mach_error_string(kerr), encoding: String.Encoding.ascii) ?? "unknown error"))
}
var info=mach\u task\u basic\u info()
变量计数=马赫数信息类型编号(内存大小)/4
让kerr:kern\u返回\u t=withUnsafeMutablePointer(to:&info){
$0.withMemoryRebound(收件人:integer\u.self,容量:1){
任务信息(机器任务自身),
任务风格(马赫任务基本信息),
$0,
&计数)
}
}
如果kerr==KERN_成功{
打印(“正在使用的内存(字节):\(info.resident\u size)”)
}
否则{
打印(“任务信息错误:”+
(字符串(cString:mach_error_String(kerr),编码:String.encoding.ascii)??“未知错误”))
}
@Bikram 您可以使用下面的函数获取系统使用的内存总量-

   func getUsedMemory() {
     var usedMemory: Int64 = 0
            let hostPort: mach_port_t = mach_host_self()
            var host_size: mach_msg_type_number_t = mach_msg_type_number_t(MemoryLayout<vm_statistics_data_t>.stride / MemoryLayout<integer_t>.stride)
            var pagesize:vm_size_t = 0
            host_page_size(hostPort, &pagesize)
            var vmStat: vm_statistics = vm_statistics_data_t()

            let status: kern_return_t = withUnsafeMutableBytes(of: &vmStat) {
                let boundPtr = $0.baseAddress?.bindMemory(to: Int32.self, capacity: MemoryLayout.size(ofValue: vmStat) / MemoryLayout<Int32>.stride)
                return host_statistics(hostPort, HOST_VM_INFO, boundPtr, &host_size)
            }
            // Now take a look at what we got and compare it against KERN_SUCCESS
            if status == KERN_SUCCESS {
                usedMemory = (Int64)((vm_size_t)(vmStat.active_count + vmStat.inactive_count + vmStat.wire_count) * pagesize)
            }
            else {
              log("Failed to get Virtual memory inforor")
            }
   }
func getUsedMemory(){
var usedMemory:Int64=0
let hostPort:mach\u port\u t=mach\u host\u self()
变量主机大小:mach\u msg\u type\u number\u t=mach\u msg\u type\u number\t(MemoryLayout.stride/MemoryLayout.stride)
变量pagesize:vm\u size\u t=0
主机页面大小(主机端口和页面大小)
var-vmStat:vm\u statistics=vm\u statistics\u data\u t()
let状态:kern\u return\u t=withunsafemtablebytes(of:&vmStat){
让boundPtr=$0.baseAddress?.bindMemory(to:Int32.self,capacity:MemoryLayout.size(of value:vmStat)/MemoryLayout.stride)
返回主机\统计信息(主机端口、主机\虚拟机\信息、边界PTR和主机\大小)
}
//现在看看我们得到了什么,并将其与KERN_的成功进行比较
如果状态==KERN_成功{
usedMemory=(Int64)((vm_size_t)(vmStat.active_count+vmStat.inactive_count+vmStat.wire_count)*pagesize)
}
否则{
日志(“获取虚拟内存信息失败”)
}
}

我已经遇到了上述解决方案,但它只提供30 mb的输出。我认为它只是给出了当前应用程序的内存使用情况。但是,我需要得到所有应用程序使用的总内存。@Bikram您如何使用这个函数。这是我刚刚创建的一个新项目的屏幕截图,其中包括空的所有内容和这个函数。我现在正在打印276MB@宁雅:没错。但当我使用其他应用程序查看内存使用情况时,它会显示1555.0MB。我认为1555MB是正确的,因为iphone不能仅在276MB上运行。如果我错了,请更正我在使用代码时遇到此错误:
对“vmStat”的重叠访问,但修改需要独占访问;考虑复制到局部变量< /代码>有什么想法吗?否则任何人都会得到上面提到的警告。您需要为容量创建一个局部变量,因此
let capacity=MemoryLayout.size(of value:vmStat)/MemoryLayout.stride
然后在
.bindMemory(to:Int32.self,capacity:capacity)…