我在xcode 4.2 SDK的monotouch 5之上有monodevelop 2.8。我的iPhone应用程序一直存在内存问题。我一直在努力找出原因,所以我创建了一个带有主要详细视图的测试应用程序。我对root控制器做了一个小修改,让它显示5个根项而不是默认的1.每次点击根项都会在导航控制器中添加一个新的DetailViewController。
controller.NavigationController.PushViewController (DetailViewController, true);
在我的详细视图控制器中,我添加了一个逻辑,只需要一个输入来控制一个循环发生的次数,然后一个按钮来触发循环发生并调用一个基于REST的服务。极少数代码更改默认值。
运行示例并在仪器中查看它我似乎高达1.2 MB的实时字节。我想通过触摸根视图控制器中的项目启动详细视图,我起床超过2 MB。旋转显示屏或触发键盘打开可使内存接近3 MB。我在控制器中导航并从rootviewcontroller打开一个不同的视图,我可以看到内存增长了一些。只需移入和移出视图,甚至不触发我的自定义代码,我就可以在超过3 MB的仪器中使用内存。我看到我的应用程序在超过3 MB之前收到内存警告。我的测试详细信息视图非常基本,文本框,标签和按钮都有插座。我的印象是我不需要做任何特别的事情来清理它们。但是,我没有看到乐器中的实时字节数下降。
作为额外测试,我添加了一个完成按钮。按下完成按钮后,我在每个插座上使用RemoveFromSuperview(),Dispose(),然后将其设置为null。我看到实时字节丢失。但如果使用后退导航,那对我没有任何作用。
我很好奇是否有人可以证实我对看到内存下降的期望。不确定使用仪器来查看实时字节是否有效。我想确定我的测试是否有效以及是否有减少内存占用的提示。任何关于减少内存占用的最佳实践的链接都是值得赞赏的,因为我似乎能够通过在屏幕之间导航来获取内存并且我的应用程序开始获取内存警告。
答案 0 :(得分:0)
如果没有看到测试应用的代码,很难评论。您有什么方法可以向http://bugzilla.xamarin.com提交错误报告并附上您的测试项目吗?
MonoTouch上有一位开发人员正在努力为GC添加额外的智能功能,因为我确信MonoTouch for 5.2会有更多的测试用例。
我也非常有兴趣查看你的测试用例。