应用程序在设备上不流畅?

时间:2011-08-25 08:09:15

标签: objective-c ios xcode ipad memory-management

我已经创建了一个管理应用程序,显示表中的所有数据,如果我调试应用程序或只是在模拟器上运行应用程序,应用程序工作非常顺利,并没有任何滞后,但当我运行/调试/发布时iPad上的应用程序是自己的,它的滞后,并在1/2秒之后响应用户交互..,为什么会这样?我根本没有内存泄漏,我完全分配和释放我使用的对象(至少我认为我是)。

我就是这样做的,

if([tablearrayTENNANTSID retainCount] != 1){tablearrayTENNANTSID = [[NSMutableArray alloc]init]; }
    else {[tablearrayTENNANTSID removeAllObjects];}

所以..基本上tennantIDarray retainscount不能高于1,因为这是它分配的唯一地方,当我想在数组中放入新数据时我删除其中的所有对象并将新对象放入其中来自JSON数组的

谢谢!

2 个答案:

答案 0 :(得分:2)

从不使用retainCount作为参考! retainCount仅用于管理对象的实习目的。与nil进行比较。如果此时retainCount为2,则泄漏内存...... 这样做:

if(tablearrayTENNANTSID == nil){
    tablearrayTENNANTSID = [[NSMutableArray alloc]init]; 
}
else {
    [tablearrayTENNANTSID removeAllObjects];
}

并在dealloc中(假设tablearrayTENNANTSID是iVar)重新发布它。

Sandro Meier

答案 1 :(得分:1)

  

我已经创建了一个管理应用程序,显示表中的所有数据,如果我调试应用程序或只是在模拟器上运行应用程序,应用程序工作非常顺利,并没有任何滞后,但当我运行/调试/发布时iPad上的应用程序是自我的,它的滞后,并在1/2秒后响应用户交互..,为什么会这样?

模拟器模拟硬件。模拟器模拟操作系统。

你的应用程序将在模拟器中执行几次。一个显着的区别是处理器速度和逻辑核心数量。

当然,模拟器和实际设备之间存在其他硬件和软件差异(例如,模拟器不能模拟浮点指令的相对成本 - 相对于arm设备cpus,intel cpus要快得多)。你也会在模拟器上有更多的内存(通常)。所有这些差异加起来使您在模拟器上体验更快的执行时间。

  

我根本没有内存泄漏,我完全分配和释放我使用的对象(至少我认为我是)。

您可以通过使用乐器运行应用程序来确认这一点。

至于您的应用为何缓慢:您可以在设备上分析(发布版本)您的应用,以确定它在哪里花费时间。如果归结为cpu时间并且你的目标是ipad,请记住你有2个内核可供使用。