成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

獲取iOS設(shè)備的內(nèi)存狀況

移動(dòng)開(kāi)發(fā) iOS
iPhone這類移動(dòng)設(shè)備內(nèi)存有限,而又不能使用交換區(qū),為了不至于導(dǎo)致內(nèi)存不足而引起運(yùn)行效率降低或應(yīng)用崩潰,有時(shí)候需要獲取當(dāng)前的內(nèi)存狀況,以決定采用的緩存策略。

由于iPhone這類移動(dòng)設(shè)備內(nèi)存有限,而又不能使用交換區(qū),為了不至于導(dǎo)致內(nèi)存不足而引起運(yùn)行效率降低或應(yīng)用崩潰,有時(shí)候需要獲取當(dāng)前的內(nèi)存狀況,以決定采用的緩存策略。

不過(guò)iOS SDK文檔里并沒(méi)有提及這種底層的API,于是我搜了一番,找到了host_statistics()這個(gè)函數(shù)。

參數(shù)雖然很多,但基本上都是固定的值,我也就不解釋,直接上代碼了:

  1. #include <mach/mach.h> 
  2.  
  3. BOOL memoryInfo(vm_statistics_data_t *vmStats) { 
  4.     mach_msg_type_number_t infoCount = HOST_VM_INFO_COUNT
  5.     kern_return_t kernReturn = host_statistics(mach_host_self(), HOST_VM_INFO, (host_info_t)vmStats, &infoCount); 
  6.      
  7.     return kernReturn == KERN_SUCCESS; 
  8.  
  9. void logMemoryInfo() { 
  10.     vm_statistics_data_t vmStats; 
  11.      
  12.     if (memoryInfo(&vmStats)) { 
  13.         NSLog(@"free: %u\nactive: %u\ninactive: %u\nwire: %u\nzero fill: %u\nreactivations: %u\npageins: %u\npageouts: %u\nfaults: %u\ncow_faults: %u\nlookups: %u\nhits: %u", 
  14.             vmStats.free_count * vm_page_size, 
  15.             vmStats.active_count * vm_page_size, 
  16.             vmStats.inactive_count * vm_page_size, 
  17.             vmStats.wire_count * vm_page_size, 
  18.             vmStats.zero_fill_count * vm_page_size, 
  19.             vmStats.reactivations * vm_page_size, 
  20.             vmStats.pageins * vm_page_size, 
  21.             vmStats.pageouts * vm_page_size, 
  22.             vmStats.faults, 
  23.             vmStats.cow_faults, 
  24.             vmStats.lookups, 
  25.             vmStats.hits 
  26.         ); 
  27.     } 

調(diào)用memoryInfo()就能拿到內(nèi)存信息了,它的類型是vm_statistics_data_t。這個(gè)結(jié)構(gòu)體有很多字段,在logMemoryInfo()中展示了如何獲取它們。注意這些字段大都是頁(yè)面數(shù),要乘以vm_page_size才能拿到字節(jié)數(shù)。

順便再簡(jiǎn)要介紹下:free是空閑內(nèi)存;active是已使用,但可被分頁(yè)的(在iOS中,只有在磁盤(pán)上靜態(tài)存在的才能被分頁(yè),例如文件的內(nèi)存映射,而動(dòng)態(tài)分配的內(nèi)存是不能被分頁(yè)的);inactive是不活躍的,實(shí)際上內(nèi)存不足時(shí),你的應(yīng)用就可以搶占這部分內(nèi)存,因此也可看作空閑內(nèi)存;wire就是已使用,且不可被分頁(yè)的。

最后你會(huì)發(fā)現(xiàn),即使把這些全加起來(lái),也比設(shè)備內(nèi)存少很多,那么剩下的只好當(dāng)成已被占用的神秘內(nèi)存了。不過(guò)在模擬器上,這4個(gè)加起來(lái)基本上就是Mac的物理內(nèi)存量了,相差不到2MB。

而總物理內(nèi)存可以用NSRealMemoryAvailable()來(lái)獲取,這個(gè)函數(shù)不需要提供參數(shù),文檔里也有記載,我就不寫(xiě)演示代碼了。

責(zé)任編輯:佚名 來(lái)源: keakon的涂鴉館
相關(guān)推薦

2011-07-26 17:50:07

iOS 設(shè)備

2017-03-19 22:13:10

WebAssemblyJavaScript編程

2011-05-11 11:55:02

應(yīng)用交付數(shù)據(jù)中心負(fù)載均衡

2011-08-03 11:21:30

iOS程序 測(cè)試 UDID

2014-09-22 10:55:14

2011-09-16 16:55:08

iOS應(yīng)用Evoz

2023-10-27 16:12:29

2015-03-13 09:30:23

iOS內(nèi)存管理

2017-02-09 21:24:22

iOS內(nèi)存管理

2018-07-23 09:26:08

iOS內(nèi)存優(yōu)化

2017-03-07 10:15:35

iOS內(nèi)存管理開(kāi)發(fā)

2024-04-16 00:13:52

JS網(wǎng)絡(luò)狀態(tài)ts類

2009-09-03 17:51:34

C#獲取設(shè)備的ID

2011-09-01 16:06:41

ios

2010-07-01 22:12:27

移動(dòng)設(shè)備iOS 邁克菲

2024-12-25 14:43:22

2013-06-27 10:57:45

判斷當(dāng)前iOS設(shè)備iOS開(kāi)發(fā)移動(dòng)開(kāi)發(fā)

2009-12-16 16:12:10

Ruby語(yǔ)言發(fā)展

2023-09-04 00:03:08

2011-10-10 14:42:22

SQL Server
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 日本成人久久 | 欧美激情在线精品一区二区三区 | 在线观看亚洲专区 | 日日夜夜天天 | 久久久91精品国产一区二区三区 | 99re在线视频精品 | 夜夜摸天天操 | 精品国产乱码久久久久久丨区2区 | 精品国产女人 | 爱爱综合网 | 国产精品视频一区二区三区四区国 | 国产高清在线观看 | 激情一区二区三区 | 日本三级视频 | 国产精品海角社区在线观看 | 国产 日韩 欧美 在线 | 日本a视频 | 嫩草伊人| 一区二区三区欧美 | 日韩不卡视频在线观看 | 欧美一级大片免费看 | 午夜视频在线观看网站 | 亚洲日本欧美日韩高观看 | 亚洲欧美日韩一区 | 91精品国产91久久久久久 | 色综久久 | 亚洲欧洲在线视频 | 91精品国产91久久久久久吃药 | 色在线免费视频 | 国产一区二区三区在线 | 97精品国产| 欧美一区视频在线 | 午夜国产| 一区二区三区回区在观看免费视频 | 国产高清视频一区二区 | 国产成人a亚洲精品 | 毛色毛片免费看 | 懂色中文一区二区三区在线视频 | 国产成人高清 | 国产成人精品一区二区 | 免费一区|