2011-01-09 41 views
0

是否可以檢測到IPHONE可用內存,以便在您的應用運行時可以提醒用戶重新啓動,具體取決於內存是否低?檢測IPHONE可用內存

+4

幹得好,他們不會爲AirBus 380那樣編寫軟件...... – 2011-01-09 03:33:42

回答

8

你爲什麼要強制用戶重啓手機?這是一個可怕的想法。 如果應用程序嘗試分配某些內容時設備的內存已滿,則操作系統會從內存中轉儲其他應用程序,直到您的應用程序和基本服務都剩下爲止。然後你會收到一條記憶警告。此時只有你的應用程序,並且基本服務正在運行。重新啓動設備不會解決這個問題。

+0

很酷。我不想強迫一個。我想只是提醒消息可以顯示。 – jarryd 2011-01-09 03:34:10

+0

這與我的經驗不符 - 或者我的內存分配速度比操作系統可以更快地釋放它,或者其他錯誤,但是我的應用程序在重新啓動後可能會消耗20+ MBs,否則操作系統會更早地終止內存警告或不。 – 2011-03-14 17:57:40

+0

如果您正在接觸到這種情況,那麼您可能正在泄漏。您應該運行一個泄漏工具並將其插入。 – BadPirate 2012-02-17 01:48:40

0

我不太清楚你在找什麼內存:內存或磁盤。但下面的代碼應該可以幫助你獲得你正在尋找的東西。忽略NSString *作爲返回值。他們的目的是爲了便於打印。

- (NSString*) totalMemory 
{ 
    NSString* v; 
    v = [NSString stringWithFormat:@"%d", [[UIDevice currentDevice] totalMemory]]; 
    return v; 
} 


- (NSString*) userMemory 
{ 
    NSString* value; 
    value = [NSString stringWithFormat:@"%d", [[UIDevice currentDevice] userMemory]]; 
    return value; 
} 


- (NSString*) freeMemory 
{ 
    NSString* value; 
    value = [NSString stringWithFormat:@"%d", [UIDevice freeMemory]]; 
    return value; 
} 


- (NSString*) totalDiskSpace 
{ 
    NSNumber* totDiskSpace= [[UIDevice currentDevice] totalDiskSpace]; 
    NSString* value = [totDiskSpace stringValue]; 
    return value; 
} 


- (NSString*) freeDiskSpace 
{ 
    NSNumber* theFreeDiskSpace= [[UIDevice currentDevice] freeDiskSpace]; 
    NSString* value = [theFreeDiskSpace stringValue]; 
    return value; 
} 
2

在iPhone上,你的觀點將得到-(void) UIViewController :didReceiveMemoryWarning,如果你是在內存運行低,這將提供機會以清除任何必要的緩存,以釋放更多的內存爲您的應用程序。如果先前沒有足夠的內存可用,最好這樣做,而不是拒絕啓動。實際上,檢測可用內存的數量將會非常棘手,因爲儘管您可能能夠獲得允許進程分配的最大內存量,但有些內存將由malloc和應用程序框架使用。

PS。強制用戶重新啓動是一種可怕的用戶體驗,如果內存不足,應用程序將自動終止,因此沒有理由強制用戶重新啓動。