9 个回答

7赞同 反对,不会显示你的姓名
张光宇,none
snow、dingc、孔庆立 等人赞同

如果你想让用户 在尽量多的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.

暂时想到的就这些, 哪位有经验的可以帮忙补充下.

发布于 2012-12-02 1 条评论 感谢

分享

收藏 • 没有帮助 •

举报

• 作者保留权利

9赞同 反对,不会显示你的姓名
刘洪峰
fanye、Jennifer她爸、孙来兵 等人赞同

iPad1最大可占到110M左右,如果冲到120M就有可能被杀掉。 
iPad2可以占用到300M以上,这个不太稳定,可能冲到350就被杀掉了。

可以在收到内存警告的时候自己的程序内部做些内存释放处理。 另外可能在内存紧张时设备的cpu也非常紧张或正在超频,那你即使在程序中对系统内存警告进行了处理,基本上也于事无补了,会crash。因为系统的内存警告有一定的滞后性,你收到后再处理,可能已经晚了,再加上cpu没空处理,再延后些就更不行了。所以以上我说的两个可能的最高值也不太可靠。 
你也可以用intruments实时跑一下,看下内存到多大时收到警告级别,控制下自己的内存,也可以用直接读取当前设备中自己的程序占内存和设备剩余内存进行实时处理,对自己的程序进行内存处理,防止被杀掉。这种方式比收到警告再处理可靠多了,目前我们内存占用大的程序基本上用这种方式处理,不理会系统的内存警告。 
因为我最近在做ipad的程序,所以对ipad1和ipad2的内存稍微了解点,iphone各版本处理方式一样,只是内存占用不太一样。iphone4和4s的内存与ipad2是一样的。

发布于 2011-12-16 4 条评论 感谢

分享

收藏 • 没有帮助 •

举报

• 作者保留权利

2赞同 反对,不会显示你的姓名
咸清,工具类、应用类、导航类App
mzds、知乎用户 赞同

这个跟iOS系统版本、硬件版本都有关。但512M那是相当不靠谱的,iOS系统就不占内存了吗?App运行时,资源文件所占的空间可以相对大一点(不一定都加载到内存),但动态开辟的内存超过20M在iPad1代上就很不稳定。 
根据http://stackoverflow.com/上的说法,App占用的内存空间可以是as much as you want, until the OS complains。然后会有人说,可以使用的内存很大,其实是一种误解,到现在人家Apple也没有说自己的内存管理规则,也不告诉你iOS系统在运行时所占的空间、后台保留程序的内存保有量,App运行时,并不是一定要把资源全部加载到内存,App运行时真正在内存中占的空间是动态的,它能够使用的内存也是动态的。
编辑于 2011-12-16 添加评论 感谢

分享

收藏 • 没有帮助 •

举报

• 作者保留权利

0赞同 反对,不会显示你的姓名
谢家欣,Python iOS Engineer and Linux System E…
建议不要超过 10M. 如果用户 只运行一个程序 内存是用可以到 30M 左右. 
不过这概率 几乎不可能. 
一般 超过 10M 就会 memory warning L1 系统会 kill 一些不用的 view 
内存管理 是门学问. 呵呵
发布于 2011-12-16 1 条评论 感谢

分享

收藏 • 没有帮助 •

举报

• 作者保留权利

2赞同 反对,不会显示你的姓名
知乎用户,计算机
mzds、知乎用户 赞同

培训的时候讲师给的数据,给你用作参考吧,注:该数据的科学性本人无法保证。
发布于 2013-07-25 1 条评论 感谢

分享

收藏 • 没有帮助 •

举报

• 作者保留权利

1赞同 反对,不会显示你的姓名
ytzong,iOS 独立开发者
咸清 赞同

这里有篇文章,可以参考一下 
http://vafer.org/blog/20081128082605/ 
LS的512m太不靠谱
发布于 2011-12-06 2 条评论 感谢

分享

收藏 • 没有帮助 •

举报

• 作者保留权利

黑伞将军
转载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)
发布于 2015-12-26 添加评论 感谢

分享

收藏 • 没有帮助 •

举报

• 作者保留权利

0赞同 反对,不会显示你的姓名
董立伟,软件工程师
ios5 ipad1上真是太让人崩溃了 总是<Warning>: Received memory warning. 
然后就Application 'XXX' exited abnormally with signal 9: Killed: 9
发布于 2011-12-16 添加评论 感谢

分享

收藏 • 没有帮助 •

举报

• 作者保留权利

0赞同 反对,不会显示你的姓名
吴泽俭
好像没有限制,但系统会自会处理,杀掉进程吧

iOS 开发中,单款应用程序的最大可用内存是多少?相关推荐

  1. ios 开发中 动态库 与静态库的区别

    使用静态库的好处 1,模块化,分工合作 2,避免少量改动经常导致大量的重复编译连接 3,也可以重用,注意不是共享使用 动态库使用有如下好处: 1使用动态库,可以将最终可执行文件体积缩小 2使用动态库, ...

  2. iOS 开发中的多线程

    线程.进程 什么是线程.进程   有的人说进程就像是人的脑袋,线程就是脑袋上的头发~~.其实这么比方不算错,但是更简单的来说,用迅雷下载文件,迅雷这个程序就是一个进程,下载的文件就是一个线程,同时下载 ...

  3. iOS开发中使用[[UIApplication sharedApplication] openURL:]加载其它应用

    iOS 应用程序之间(1) 在iOS开发中,经常需要调用其它App,如拨打电话.发送邮件等.UIApplication:openURL:方法是实现这一目的的最简单方法,该方法一般通过提供的url参数的 ...

  4. iOS开发中各种关键字的区别

    1.一些概念 1.浅Copy:指针的复制,只是多了一个指向这块内存的指针,共用一块内存. 深Copy:内存的复制,两块内存是完全不同的, 也就是两个对象指针分别指向不同的内存,互不干涉. 2.atom ...

  5. Xamarin iOS开发中的编辑、连接、运行

    Xamarin iOS开发中的编辑.连接.运行 创建好工程后,就可以单击Xamarin Studio上方的运行按钮,如图1.37所示,对HelloWorld项目进行编辑.连接以及运行了.运行效果如图1 ...

  6. ios开发中计算代码运算时间_iOS日历、日期、时间的计算

    时间和日历的计算在iOS开发中经常看到,经常看到大家在百度,开源中国等搜索这些答案.今天写个简单的时间和日历有关的计算. 获取一个月的总天数 1.获取当月的天数 - (NSInteger)getNum ...

  7. iOS开发中标签控制器的使用——UITabBarController

    iOS开发中标签控制器的使用--UITabBarController 一.引言 与导航控制器相类似,标签控制器也是用于管理视图控制器的一个UI控件,在其内部封装了一个标签栏,与导航不同的是,导航的管理 ...

  8. iOS开发UI篇—iOS开发中三种简单的动画设置

    [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要"参与到"动画中 [UIView beginAnimations: ...

  9. 浅谈iOS 开发中的界面通信

    在任何的软件开发中都离不开界面与界面之间的通信,界面通信的最直接的方法就是界面传值. 在开发过程中我们在页面传值时我们通常使用的方法有:属性传值法,block传值法,代理传值法,以及单例传值法,通知传 ...

最新文章

  1. python猜数游戏在程序中预设一个_一道Python简单程序结构练习题
  2. HDU 2157 How many ways?? 临接矩阵+快速幂
  3. NYOJ 79 拦截导弹
  4. linux中find查找命令的mtime参数使用方法说明
  5. python 线程池_Python线程池及其原理和使用(超级详细)
  6. Maven打包时去掉项目版本号
  7. 《深入浅出WPF》学习笔记之深入浅出话属性
  8. OpenCV环境搭建(一)
  9. mysql schema数据混乱_MySQL之Schema与数据类型优化
  10. 约会软件上的小姐姐,其实是StyleGAN生成的假人
  11. Linux 利用hosts.deny 防止暴力破解ssh
  12. 博文视点大讲堂第20期——Windows 7来了
  13. TSAP(2) : 时区切换
  14. python菜鸟教程基础入门
  15. 回顾RHCE——邮件收发实验
  16. 多路测温系统C51语言,51单片机多路DS18B20温度测量程序
  17. 二十一日——美国寻梦
  18. 图形用户界面GUI(一)
  19. Cobbler 自动装机系统
  20. 最新精仿乐乐易支付网站模板源码

热门文章

  1. java8 list 去重_Java8中的Stream,一行代码,让集合操作飞起来
  2. y空间兑换代码_loam代码解析3
  3. 怎么查看过程xact_abort 是否开启_空调噪音大怎么办?
  4. 关于计算机网络的鼻祖是,笔记本的前世今生!谁才是笔记本的开山鼻祖?
  5. Android访问瓦片地图 费流量,瓦片地图服务在线资源访问总结
  6. linux apache中文名称图片,linux下解决apache不支持中文名的方法详解!
  7. python分类器鸢尾花怎么写_python机器学习基础教程:鸢尾花分类
  8. java 私有成员方法_Java Reflection 教程(7):类私有成员变量和方法
  9. 四川南充计算机经贸学校,四川南充工贸学校计算机应用专业秋季计划
  10. arm64 指令集_透彻解析LED驱动芯片HT1632C指令集与驱动编程