【问题标题】:App is not smooth on the device?设备上的应用程序不流畅?
【发布时间】:2011-11-03 11:02:29
【问题描述】:

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

我就是这样做的,

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

所以.. 基本上,tennantIDarray 保留计数不能高于 1,因为那是它被分配的唯一位置,当我想将新数据放入数组中时,我删除其中的所有对象并将新对象放入其中,我收到来自 JSON 数组的

已经谢谢了!

【问题讨论】:

  • 您不仅应该从不使用retainCount——甚至不能用于调试——你还应该知道它从不返回0。跨度>

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


【解决方案1】:

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

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

dealloc(假设tablearrayTENNANTSID 是一个iVar)中释放它。

桑德罗·迈耶

【讨论】:

  • hmm,我不知道我不应该使用 retainCount 作为参考,提示:),那么我将使用 nil 作为参考。
【解决方案2】:

我制作了一个管理应用程序,它在表格中显示分配的数据,如果我调试应用程序或只是在模拟器上运行应用程序,应用程序运行非常顺利并且根本不会滞后,但是当我运行/调试/发布时iPad 上的应用程序它自己,它的滞后,并在 1/2 秒后响应用户交互..,这是为什么呢?

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

您的应用在模拟器中的执行速度将提高几倍。一个显着的区别是处理器速度和逻辑核心数。

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

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

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

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

【讨论】:

  • 我用仪器做了一个测试,我根本没有泄漏:),但是谢谢!
  • @Emre 不客气。分析时,还要分析设备上的执行情况以获得准确的配置文件,因为执行可能会有所不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多