我正在开发一个IOS application.In Xcode,我会分析应用程序的运行->分析它显示了47个潜在的内存泄漏我检查了所有的情况在大多数情况下不可能释放内存,在应用商店中启动应用程序时会出现任何问题吗?我已经彻底检查了应用程序,它没有在任何地方崩溃,也没有在任何地方显示低内存警告。由于我是IOS开发的新手,请告诉我我能为此做些什么
在viewDidUnload方法中释放内存以避免内存泄漏是否足够?
发布于 2011-09-16 07:19:33
如果它没有显示任何内存警告,它可能不会被拒绝。但是,构建有漏洞的应用程序通常不是好的编程。你为什么不解决那些漏洞?没有一种情况下你不能释放你的资源。使用自动释放或在需要的任何地方将释放消息传递给元素。
此外,为了更好地分析你的应用程序,使用仪器运行应用程序,它会让你更好地了解泄漏来自哪里。
编辑:如何使用仪器运行应用程序。
在Xcode中,单击顶部菜单栏中的Run。在本节中,进入Run with Performance Tools,然后选择Leaks。
要了解如何使用仪器,请访问here。
发布于 2011-09-16 07:36:48
注:我还没有机会玩一些最新的功能,如ARC,所以这可能是或可能不会过时了。
是的,这可能是一个问题。根据苹果公司的说法,这是他们确实会检查的一件事。然而,似乎没有什么能保证苹果的审查团队会拒绝(或接受)。然而,也许更重要的是,你希望自己作为应用程序开发者的声誉良好,你想从事让人们的手机更好地为他们工作的业务。
如果操作得当,您将始终可以释放使用new或alloc创建的任何对象。
但是,为了防止、跟踪和消除内存泄漏,您需要使用:
1. analysis
2. Instruments Leaks
3. Your own analysis, and peer review when needed
4. Clean coding, best practices and patterns
在使用Instruments泄漏分析工具时,请使用您的应用程序并尝试命中所有不同的执行路径。查看对象是否显示为泄漏。我通常根据泄漏的总大小(对象大小*泄漏数量)来确定优先级,然后向下工作,直到没有泄漏出现为止。单击该对象将显示该对象最初分配位置附近的某个位置。
我发现即使是Instruments也可能无法显式地捕获所有的内存泄漏。
另一个技巧,在这方面可能会有所帮助,是推理出一些不同的“循环”,你可以在你的应用程序中,一旦你返回“家”,你的应用程序应该具有与上次你在那里相同的内存占用。例如,从主屏幕开始,执行活动X,然后执行活动Y,然后返回到主屏幕。假设您期望在第一个周期之后,第二次和第三次返回到主屏幕,内存占用空间应该是相同的。然后,您可以使用连接的Instruments和分配的数量来练习此操作。这可以为您提供一些有价值的信息。
保留周期可能会发生一些有趣的事情,当您在类之间具有循环依赖时可能会发生这种情况,并且在尝试使用块执行某些事情时很容易发生这种情况。
当对象在应用程序的整个生命周期(如单例)中持续存在时,您可能会试图忽略有关内存泄漏的警告。我的意见是消除警告并将对象重新分配到某个地方,这是一个干净的问题。
当你构建的时候,没有编译器和分析器的警告也会让你感觉很好!
发布于 2011-09-16 07:20:20
如果你在模拟器上测试,你可能永远不会看到内存不足的警告。但不管怎样,所有的内存泄漏都应该是可以修复的,除了那些存在于Apple框架中的内存泄漏(这些框架可能并不多)。
Analyze返回了什么类型的信息?
https://stackoverflow.com/questions/7441257
复制