我在我的Iphone应用程序上运行了一些压力测试。结果如下。我想知道我是否应该关注,如果是的话,我可能会做些什么。
我设置一个计时器每秒触发一次。每当计时器触发时,应用程序都会从服务器请求一些XML数据。当数据到达时,应用程序然后解析数据并重新显示受影响的表视图。在几次试验中,应用程序在崩溃之前通过循环平均大约500次。
然后我从上面的循环中删除了解析和重新显示步骤。现在它可以进行大约800次。
我设置了一个循环来重复重新显示表格视图,而不下载任何内容。一旦重新显示完成,下一个重新开始。在2601循环之后,应用程序崩溃了。
以上所有数字都大于用户可能做的数字。
此外,当我尝试在乐器下的设备上运行时,我的应用程序永远不会持续很长时间。所以我无法以这种方式获得有用的数据。 (但如果没有乐器,它会持续很长一段时间,如上所述。)
答案 0 :(得分:2)
我想你需要非常关注。编程的第一条规则是用户永远不会做你期望的事。
需要考虑的事项:
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];
已编辑(根据您的故障代码添加) 基于您的上述“程序接收信号:0”的答案。这表明您的内存已用完。我首先会查找代码执行类似的实例:
myObject = [[MyClass alloc] init];
[someMutableArray addObject:myObject];
并且在将新对象放入数组时没有“释放”。如果这个数组随后被释放,那么对象myObject将成为一个孤儿,但无论如何都要在内存中闲逛。这样做的简单方法是grep所有的“alloc”/“copy”消息。除极少数情况外,在同一功能中应该配对“释放”/“自动释放”。通常情况下,上面应该是:
myObject = [[[MyClass alloc] init] autorelease];
[someMutableArray addObject:myObject];