iOS 開發中,單款應用程序的最大可用內存是多少?

iphone 和ipad 的可用內存分別是多少?


iPad1最大可佔到110M左右,如果衝到120M就有可能被殺掉。

iPad2可以佔用到300M以上,這個不太穩定,可能衝到350就被殺掉了。

可以在收到內存警告的時候自己的程序內部做些內存釋放處理。 另外可能在內存緊張時設備的cpu也非常緊張或正在超頻,那你即使在程序中對系統內存警告進行了處理,基本上也於事無補了,會crash。因為系統的內存警告有一定的滯後性,你收到後再處理,可能已經晚了,再加上cpu沒空處理,再延後些就更不行了。所以以上我說的兩個可能的最高值也不太可靠。

你也可以用intruments實時跑一下,看下內存到多大時收到警告級別,控制下自己的內存,也可以用直接讀取當前設備中自己的程序占內存和設備剩餘內存進行實時處理,對自己的程序進行內存處理,防止被殺掉。這種方式比收到警告再處理可靠多了,目前我們內存佔用大的程序基本上用這種方式處理,不理會系統的內存警告。

因為我最近在做ipad的程序,所以對ipad1和ipad2的內存稍微了解點,iphone各版本處理方式一樣,只是內存佔用不太一樣。iphone4和4s的內存與ipad2是一樣的。


轉載StackOverflow上面的回答

iphone - ios app maximum memory budget

做了一些測試如下,不是官方數據

iPad1: 127MB/256MB/49% (crash amount/total amount/percentage of total)

iPad2: 275MB/512MB/53%

iPad3: 645MB/1024MB/62%

iPad4: 585MB/1024MB/57% (iOS 8.1)

iPad Mini 1st Generation: 297MB/512MB/58%

iPad Mini retina: 696MB/1024MB/68% (iOS 7.1)

iPad Air: 697MB/1024MB/68%

iPad Air 2: 1195MB/2048MB/58% (iOS 8.x)

iPod touch 4th gen: 130MB/256MB/51% (iOS 6.1.1)

iPod touch 5th gen: 286MB/512MB/56% (iOS 7.0)

iPhone4: 325MB/512MB/63%

iPhone4S: 286MB/512MB/56%

iPhone5: 645MB/1024MB/62%

iPhone5S: 646MB/1024MB/63%

iPhone6: 645MB/1024MB/62% (iOS 8.x)

iPhone6+: 645MB/1024MB/62% (iOS 8.x)

iPhone6s: 1195MB/2048MB/58% (theoretical, untested)

iPhone6s+: 1195MB/2048MB/58% (theoretical, untested)


如果你想讓用戶 在盡量多的iOS設備上得到比較穩定的體驗, 實用過程中不Crash, 不因為GC而停頓, 答案是: 越少約好.

比如, 在一個越獄的iPod touch4上, 如果用戶安裝了第三方的輸入法, 在加上用戶頻繁切換應用程序, 那麼你最好能將內存控制在3M以內. 否則會頻繁收到memory warning的提醒.

一旦收到該提醒, iOS會自動調用viewDidLoad方法, 釋放none top view, 來節約內存. 有很多代碼質量不高的App 就會在這裡crash掉.

接著用戶在你的App上點擊了一些按鈕, 剛才這些釋放掉的view又需要重新建立. 於是就會卡一下.

如果在memory warning後沒有釋放足夠多的內存, iOS會直接kill掉你的App.

那麼, 如何保持內存佔用不要太高?

1. tableviewCell中的icon圖片要用剪裁過的, 不要把那些1M左右的圖片直接從web端傳輸過來

2. 一些比較深,或者循環比較多的代碼block中, 盡量在外圍套一層autorelease pool, 執行完畢後直接[pool drain]

3. tableview cell一定要reuse, 其他類似的view也要reuse.

暫時想到的就這些, 哪位有經驗的可以幫忙補充下.


我寫了個for循環,模擬內存泄露,5s真機調試。 在程序佔650M左右的時候,崩潰了。 5s內存是1G。


這個跟iOS系統版本、硬體版本都有關。但512M那是相當不靠譜的,iOS系統就不佔內存了嗎?App運行時,資源文件所佔的空間可以相對大一點(不一定都載入到內存),但動態開闢的內存超過20M在iPad1代上就很不穩定。

根據http://stackoverflow.com/上的說法,App佔用的內存空間可以是as much as you want, until the OS complains。然後會有人說,可以使用的內存很大,其實是一種誤解,到現在人家Apple也沒有說自己的內存管理規則,也不告訴你iOS系統在運行時所佔的空間、後台保留程序的內存保有量,App運行時,並不是一定要把資源全部載入到內存,App運行時真正在內存中占的空間是動態的,它能夠使用的內存也是動態的。


ios5 ipad1上真是太讓人崩潰了 總是&: Received memory warning.

然後就Application "XXX" exited abnormally with signal 9: Killed: 9


培訓的時候講師給的數據,給你用作參考吧,註:該數據的科學性本人無法保證。


好像沒有限制,但系統會自會處理,殺掉進程吧


這裡有篇文章,可以參考一下

http://vafer.org/blog/20081128082605/

LS的512m太不靠譜


建議不要超過 10M. 如果用戶 只運行一個程序 內存是用可以到 30M 左右.

不過這概率 幾乎不可能.

一般 超過 10M 就會 memory warning L1 系統會 kill 一些不用的 view

內存管理 是門學問. 呵呵


推薦閱讀:

現在大公司做iOS開發的時候,界面一般用的是手寫代碼,還是用xib/storyboard?
如何看待 WWDC 2016 上推出的 Swift Playgrounds?
為什麼安卓不採用墓碑機制?
Windows Phone 7 系統的使用體驗,相對 Android 和 iOS 來說,有哪些優劣之處?
為什麼安卓不採用推送(push notification)這種優雅,省資源的通知方式呢?

TAG:iPhone | iPad | iOS | iPhone應用 | iOS開發 | 程序 |