在iPhone上的内存泄漏期间会发生什么样的奇怪行为?

时间:2009-02-24 18:30:21

标签: iphone cocoa cocoa-touch memory-management

我已经能够在我正在处理的iPhone应用程序上一致地复制一个bug。一旦我的UIViewController的didReceiveMemoryWarning方法被调用,bug就会随之出现。我看到的一些问题如下:

     
  • UITextField的文本属性,无法识别。
  •  
  • UITextField中的先前数据会多次附加到字符串,因此当我向服务器发送HTTP时,会向我提供损坏的数据

只要我在didReceiveMemoryWarning上的断点命中,就会发生这种情况,否则所有似乎都工作得很好。我的问题是,在内存泄漏期间发生这种奇怪的行为听起来是否正常?如果是这样的话,UIViewController会在先前的UITextField(这是UITableViewCell的contentView的一部分中引起数据的临时重复)发生了什么,所以我认为有一些奇怪的事情会出现在单元格中。

这很有意思。

谢谢!

2 个答案:

答案 0 :(得分:1)

当iPhone内存不足时,操作系统会尝试智能地执行操作以减少内存开销。在一些情况下,我看到这导致奇怪的行为,如文本内容丢失或键盘无法显示。

但是,您可能希望专注于查找内存问题的来源而不是结果。

答案 1 :(得分:-1)

通常,不是很多,只要您的应用程序没有使用硬件中的所有内存。但是内存泄漏可能会堆积起来,接下来你就知道你已经没有内存了。随着虚拟内存的启动和部分应用程序开始分页到速度慢得多的闪存磁盘存储,您可能会看到性能突然下降。这是当你的控制器可能会得到低内存警告时,UIKit可能会删除它认为你不需要的东西(比如没有超级视图的视图,可能还有其他东西)。不久之后,整个应用程序都会崩溃,因为iPhone操作系统会因为使用太多内存而迫使它退出。

简短版本:内存泄漏导致崩溃。但删除它认为你不需要的物体也可能会引起一些奇怪的行为。