我需要的是一种编程验证目标对象是否已被释放的方法。目前,我在我想要观察的对象的dealloc方法中使用了NSLog语句。
单元测试框架来自于Google Toolbox for the mac,并且工作得很好。我只是不确定如何构建这个特定的测试。
dealloc
方法。请参考CocoaDev 上的 MethodSwizzling;该页面底部有一个使用 Leopard 新的 method_exchangeImplementations
函数的现代方法。dealloc
方法的文件中使用静态变量;您的测试方法将该变量设置为 NO
,然后释放对象,并断言该变量的值现在为 true。我可能有点天真,但是一个释放内存的单元测试不应该包括以下步骤吗:
我已经编写了一个函数,它会释放对象并在对象被释放后返回YES
:
BOOL getsDeallocatedByReleasing(id object);
还有一个高级界面,您可以在其中运行任意代码块,并获得一个布尔值,指示是否已释放给定类的对象:
BOOL classGetsDeallocated(Class c, void (^block)(void));
这段代码使用了方法交换技术,虽然有些丑陋并且肯定不是线程安全的,但它能够正常工作。你可以在GitHub上找到它,如果我发现任何错误,我会及时更新。
附言:在编写所有代码(噢!)之后,是否有可能在开头添加一个单独的retain
,执行您想要的操作,拆除您正在检查的对象图并检查对象的保留计数?