【发布时间】:2011-09-28 09:53:19
【问题描述】:
您将如何编写单元测试(例如,使用 OCUnit)以确保对象在 Cocoa/Objective-C 中被正确释放/保留?
一种天真的方法是检查retainCount 的值,当然you should never use retainCount。你能简单地检查一个对象的引用是否被赋值为nil 以表明它已经被释放了吗?另外,您对实际释放对象的时间有什么保证?
我希望只有几行代码的简洁解决方案,因为我可能会广泛使用它。实际上可能有两个答案:一个使用自动释放池,另一个不使用。
澄清一下,我并不是在寻找一种方法来全面测试我创建的每个对象。不可能对任何行为进行全面的单元测试,更不用说内存管理了.不过,至少,最好检查已发布对象的行为以进行回归测试(并确保相同的与内存相关的错误不会发生两次)。
关于答案
我接受了BJ Homer 的answer,因为我发现它是完成我的想法的最简单、最简洁的方法,因为需要注意的是Automatic Reference Counting 提供的弱指针在截至 2011 年 7 月 23 日的 XCode 生产版本(4.2 之前?)。得知这一点我也印象深刻
ARC 可以在每个文件的基础上启用;它不需要您的 整个项目都使用它。您可以使用 ARC 和 将您的主要项目留在手动保留释放上,此测试将 还在工作。
话虽如此,为了更详细地探索 Objective-C 中单元测试内存管理所涉及的潜在问题,我强烈推荐 Peter Hosey 的 in-depth response。
【问题讨论】:
-
我赞成这个不是因为我认为这是一件好事,而是因为我认为它会引起一个很好的答案,我猜这基本上是 “不要".
标签: objective-c cocoa unit-testing memory-management ocunit