2010-05-09 16 views
23

क्या आईफोन ओएस में किसी ऐप के लिए उपलब्ध मेमोरी की मात्रा को परिभाषित करने या निरंतर परिभाषित करने के लिए कोई फ़ंक्शन या निरंतर है?आईफोन ओएस ऐप के लिए उपलब्ध स्मृति

मैं यह जानने के लिए एक डिवाइस-स्वतंत्र तरीका (आईपॉड टच, आईफ़ोन, आईपैड) ढूंढ रहा हूं कि ऐप कितनी मेमोरी छोड़ गई है।

उत्तर

49

इस समारोह बाइट में उपलब्ध स्मृति वापस आ जाएगी:

#import <mach/mach.h> 
#import <mach/mach_host.h> 

natural_t freeMemory(void) { 
    mach_port_t   host_port = mach_host_self(); 
    mach_msg_type_number_t host_size = sizeof(vm_statistics_data_t)/sizeof(integer_t); 
    vm_size_t    pagesize; 
    vm_statistics_data_t  vm_stat; 

    host_page_size(host_port, &pagesize); 

    if (host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size) != KERN_SUCCESS) NSLog(@"Failed to fetch vm statistics"); 

    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; 

    return mem_free; 
} 
+0

धन्यवाद बेन। बस पुष्टि करने के लिए, क्या आपका समाधान किसी भी निजी एपीआई का उपयोग करता है? इसका उपयोग करने के लिए मुझे कौन से पुस्तकालयों का आयात करना चाहिए? – hpique

+0

नहीं, कोई निजी एपीआई नहीं। –

+0

यह अच्छा है @ बेन्गॉटलिब, किसी को यह दिमाग कैसे है? कोड जो आपने यहां किया है, मैं कभी नहीं सोच सकता था? महान! – Hemang

3

कोई आईफोन ऐप उपयोग नहीं कर सकता है कि स्मृति की कोई परिभाषित अधिकतम मात्रा नहीं है। क्या स्मृति की कमी के कारण आपका ऐप समाप्त हो जाएगा या नहीं, ओएस का उपयोग करने वाले एल्गोरिदम पर निर्भर करता है और एक ही समय में स्मृति का उपयोग करने के लिए अन्य ऐप्स क्या होते हैं (सफारी, मेल इत्यादि)।

+0

यदि आप स्मृति पर कम चल रहे हैं तो ओएस सफारी, मेल, आदि धागे को मार देगा। आप इसे कंसोल लॉग में देख सकते हैं क्योंकि आपको स्मृति पर कम मिलता है। – progrmr

+0

क्या इसका मतलब यह है कि बेन गॉटलिब का जवाब गलत है? – hpique

+0

@ एचजीपीसी, लाभदायक * सिस्टम मेमोरी 'कैसे ढूंढें, यह जानने के लिए उसका तरीका है, क्योंकि यदि आप आवंटित करते हैं, तो सिस्टम आपके लिए अधिक मुक्त होगा, यह एक निश्चित संख्या नहीं है और यदि आप बहुत अधिक आवंटित करते हैं, तो आपकी प्रक्रिया मारे जा सकती है। मेरी समझ के तहत कोई आईफोन एप्लिकेशन 30 एमबी मेमोरी अधिक से अधिक उपयोग नहीं करना चाहिए। – overboming

3

निम्नलिखित तेज समारोह बाइट में सिस्टम मुक्त स्मृति (RAM) वापस आ जाएगी। यह विफलता पर शून्य वापस आ जाएगा।

func systemFreeMemorySize() -> UInt? 
{ 
    let HOST_VM_INFO_COUNT: mach_msg_type_number_t = mach_msg_type_number_t(sizeof(vm_statistics_data_t)/sizeof(integer_t)) 

    let host: host_t = mach_host_self() 

    var pageSize: vm_size_t = vm_size_t() 
    let hostPageSizeKernStatus: kern_return_t = host_page_size(host, &pageSize) 
    guard hostPageSizeKernStatus == KERN_SUCCESS else { 
     NSLog("Error with host_page_size(): " + (String.fromCString(mach_error_string(hostPageSizeKernStatus)) ?? "unknown error")) 
     return nil 
    } 

    var stats: vm_statistics_data_t = vm_statistics_data_t() 
    var count: mach_msg_type_number_t = HOST_VM_INFO_COUNT 

    let kernStatus: kern_return_t = withUnsafeMutablePointer(&stats) { 
     return host_statistics(host, HOST_VM_INFO, host_info_t($0), &count) 
    } 

    guard kernStatus == KERN_SUCCESS else { 
     NSLog("Error with host_statistics(): " + (String.fromCString(mach_error_string(kernStatus)) ?? "unknown error")) 
     return nil 
    } 

    return UInt(stats.free_count) * UInt(pageSize) 
} 
संबंधित मुद्दे