自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

獲取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中,只有在磁盤上靜態(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ù),文檔里也有記載,我就不寫演示代碼了。

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

2011-07-26 17:50:07

iOS 設(shè)備

2014-09-22 10:55:14

2011-08-03 11:21:30

iOS程序 測(cè)試 UDID

2011-05-11 11:55:02

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

2011-09-16 16:55:08

iOS應(yīng)用Evoz

2017-03-19 22:13:10

WebAssemblyJavaScript編程

2017-02-09 21:24:22

iOS內(nèi)存管理

2015-03-13 09:30:23

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ā)

2023-10-27 16:12:29

2024-04-16 00:13:52

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

2011-09-01 16:06:41

ios

2010-07-01 22:12:27

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

2009-09-03 17:51:34

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

2013-06-27 10:57:45

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

2024-12-25 14:43:22

2016-04-11 09:30:49

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

2023-02-08 08:12:15

2021-07-07 12:01:48

iOS內(nèi)存對(duì)齊
點(diǎn)贊
收藏

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