iPhone:我的泄漏应用程序会对其他应用程序造成危害吗?

4

我完成了我的第一个iPhone应用程序,并将其发送给了一组测试人员。

除了一个人之外,每个人都很满意。这位用户发现,在运行我的应用程序后,另一个应用程序无法启动。

由于对内存管理不够了解,我开始查看Instruments中的泄漏图表,并注意到我的应用程序存在一些泄漏。

以下是三个问题:

  1. 泄漏总是不好的吗?最大的泄漏是15k,在分配的5.1 MB内存中。
  2. 苹果会因为泄漏而拒绝我的应用程序吗?
  3. 并不是所有的内存都会在我的应用程序退出时自动释放,我的泄漏应用程序可能会对其他应用程序造成影响吗?

谢谢 Sjakelien


如果用户注意到您的应用程序能够影响其他应用程序的运行,那么显然您的代码的某些效果会在您的应用程序退出后继续存在。即使苹果没有注意到,听起来您的审核人员可能会注意到。 - David Maymudes
1
我们没有可重现的情况,因此大胆地说Sjakelien的应用影响了另一个应用是过分的。我们只知道测试人员在运行Sjakelien的应用程序后一段时间才注意到另一个应用程序不起作用。 - Chuck
5个回答

8
每个应用程序都应该在自己的“沙盒”中运行,并且设计上不应影响手机上安装的任何其他应用程序。如果您的审核者发现您的应用程序确实影响了其他应用程序,那绝对不是您的错,但我很想知道是如何完成的; )。
我的猜测是,您的审核者的其他应用程序完全独立于您的应用程序而崩溃,他/她正在错误地将故障归因于您的应用程序。请要求他尝试重现问题(卸载两个应用程序,安装其他应用程序,再安装您的应用程序)。

在iPhoneOS中找到漏洞并不需要太费力。 "iPhone黑客"可以从这里开始:http://openradar.appspot.com/search?query=iphone - Rhythmic Fistman
1
为了重现这个 bug,我建议你先重新启动设备,然后运行你的应用程序,检查另一个是否出现问题(或者重新启动并运行另一个看看它是否能正常工作)。 - Dimitris

5

我同意其他两个答案的观点,但是没有人直接回答第一个问题(“内存泄漏总是不好吗”)。我的回答是肯定的。虽然你的程序可能长时间运行而没有问题,操作系统也应该在终止后清理内存(除非操作系统存在漏洞,如前所述),但是最终这种泄漏会成为某些人长时间运行时的问题。即使没有成为问题,修复已知的内存泄漏也可能是最佳实践。


3
任何持续超出您的应用程序退出的泄漏都是操作系统错误,因此是苹果公司的问题。
基于这个原因拒绝您的应用程序是不公平的。我不知道这是否能给您带来一些安慰。
就记录而言,我的应用程序在mediaserverd中引发了一个泄漏。在3.0GM中,泄漏略微减小了一点。
另一个API的不正确使用导致mediaserverd崩溃。同样是3.0GM。很恶劣。我更喜欢一个错误代码,但是理论上可以使用它来解决泄漏问题。

1
mediaserverd对其输入并不十分谨慎。我能做的最糟糕的事情就是吃掉CPU并引起缓冲循环(有效地杀死所有音频/振动,直到用户重新启动设备)。此外,还可以在您的应用程序关闭后安排长时间的音频。遇到其他令人讨厌的崩溃了吗? - rpetrich
两个崩溃(一个在2.x,一个在3.0),2.x泄漏200k,3.0泄漏200字节。这是垃圾。 - Rhythmic Fistman

1

这取决于你泄漏了什么“内存”。你是否使用设备存储空间来缓存某些内容?理论上,如果你已经使用了足够的空间,其他应用程序无法启动,因为它需要一定量的可用空间。

如果我们谈论物理内存,那么不行。当你的应用程序死亡时,它就死了。你可以要求他们重新启动设备,看看他们是否有同样的问题。


1

苹果确实批准具有内存泄漏的应用程序。

话虽如此,我们在提交给苹果之前会彻底检查“我们的代码”是否存在泄漏,因为用户不喜欢应用程序突然关闭。我说“我们的代码”,因为框架中存在一些不是你造成的内存泄漏。因此,苹果批准具有内存泄漏的应用程序。

此外,我怀疑您的应用程序对用户的其他应用程序产生了负面影响。我没有看到过这种行为。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接