2010-02-26 74 views
1

我对我的iPhone应用程序进行了一些压力测试。结果如下。我想知道我是否应该担心,如果是的话,我可能会对此做些什么。我的iPhone应用程序的一些压力测试

我设置了一个定时器,每秒触发一次。每当定时器启动时,应用程序都会从​​服务器请求一些XML数据。数据到达后,应用程序会解析数据并重新显示受影响的表格视图。在几次试验中,应用程序在撞击之前平均通过循环约500次。

然后我从上面的循环中删除了解析和重新显示步骤。现在它可以去800次左右。

我设置了一个循环来反复重新显示表格视图,而无需下载任何东西。一旦重新显示完成,下一个就开始了。 2601循环后,应用程序崩溃。

以上所有数字都比用户可能做的要大。

此外,当我尝试在乐器下的设备上运行它时,我的应用永远不会持续很久。所以我不能以这种方式获得有用的数据。 (但没有仪器它持续相当长一段时间,如上所述。)

+0

它如何崩溃? –

+0

“程序接收信号:0” –

回答

2

我会说你需要非常关心。编程的第一条规则是用户永远不会做你期望的事情。

需要考虑的事情:

  • 存取方法。使用它们。设置 属性所有属性和 始终与 适当的getter/setter方法访问它们:

object.property = some_other_object;  -OR- 
[object setProperty:some_other_object]; 

object = some_other_object.some_property; 
object = [some_other_object some_property]; 

抵制诱惑,做这样的事情:

property = some_other_object; 
[property retain]; 
  • 你从得到ObjectAlloc中输出? 有4个内存泄漏工具, 性能和对象分配。 他们全都没有人加载?
  • 当应用程序崩溃时,你会得到什么? EXEC_BAD_ACCESS或其他一些错误?
  • 平衡保留(无论是alloc还是 副本)和版本。用 相同的方法来保持每个分配/副本均衡 的释放/自动释放是一个好主意 。如果您使用您的 访问器所有的时间,需要 做手动发布很少。
  • Autorelease经常会隐藏真正的 问题。有可能Autorelease 可以掩盖一些棘手的分配 问题。仔细检查您的使用 autorelease。

编辑(根据您的故障代码添加) 根据您的上述“编程接收信号:0”的回答。这表示您的内存不足。我会通过寻找你的代码确实是这样情况下启动:

myObject = [[MyClass alloc] init]; 
[someMutableArray addObject:myObject]; 

,你没有“释放”,当你把新的对象到数组。如果这个数组被释放,那么对象myObject将成为一个孤儿,但无论如何都会在内存中存在。这样做的简单方法是grep所有的“alloc”/“copy”消息。除极少情况外,在同一功能中应该有一对“释放”/“自动释放”。通常情况下,上述应该是:

myObject = [[[MyClass alloc] init] autorelease]; 
[someMutableArray addObject:myObject]; 
+0

您的答案可以概括为:使用标准的可可内存管理模式,以确保您不会泄漏内存 – rpetrich

+0

相当多。我过去(想想OpenStep),我已经完成了5万多个线程,并且每天只用了一天的时间进行泄漏和清理。如果你虔诚地遵守规则,他们就像魅力一样工作。它们还使事情在以后的日子更容易阅读和拾取。 –