最佳的iOS内存分配策略?

我在辩论自己关于iOS上的内存分配。 我用C ++编写了大部分代码,而且我非常喜欢使用ObjectPools,FreeLists等。为了预先分配很多我在游戏过程中不断“alloc / dealloc”的内容(比如粒子,游戏实体等)。

仍然在iOS上,这不像我们正在开发像PSP这样的控制台,在那里我可以知道,我会得到一个固定的内存量。 iOS系统需要内存时会发出“内存警告”。

有没有人对此有一些建议? 新的iPod touch / iPhone 4载有更多的内存是否太严重了? 或者它仍然是一个大问题?

使用你的共同的内存管理意识。 将池/ freelist用于经常分配和释放的内容(即粒子),空闲的未使用的内存块。 但是,不要试图预先分配大量的内存。 iOS不保证内存也不交换,所以你分配的任何内存都将占用系统和其他应用程序的资源。 如果系统不能获得足够的内存,因为你的应用程序占用了所有内存,那么它将会使你的应用程序失效。 您应该通过释放尽可能多的内存来处理applicationDidReceiveMemoryWarning的devise内容。 虽然iPhone 4有很多内存,但是所有的多任务function以及人们倾向于使用它们的方式,实际上内存可能比您想象的要less。

(另外,不要忘记configuration你的应用程序,看内存分配是否是一个瓶颈!)

注意5ound的答案:注意记忆警告的级别。 在iOS 3.2之前,没有办法区分不同严重程度的警告(例如操作系统只是坐在一堆可以清除的UIImage上,还是没有剩余内存?)。 在3.2开始,您可以检查内存警告的级别以确定如何反应。 根据我的经验,一级警告是不变的,不可避免的,很大程度上是毫无意义的,所以我不会采取任何激烈的行动来回应他们。 虽然二级警告并不一定是即将到来的厄运迹象,但您应该认真对待它们,并开始清理任何可能的caching等。

这里有一个很好的讨论不同的级别: https : //stackoverflow.com/questions/2915247/iphone-os-memory-warnings-what-do-the-different-levels-mean

PS – 这是更多的评论5ound的答案,但我没有足够的代表评论,所以这是我唯一的select…