有一些方法可以测试一个objective-c实例被解除分配/释放(保留计数== 0)?
例如,对象A有一个对象B的引用(指针),但是对象B可以在内存中释放低级别,我如何测试引用B以确保它被解除分配?
@interface A : NSObject { B b; } @implementation A { - (void) someAction:(id) sender { //is b previously dealloced?? if ..... ???? { b = [[B alloc] init]; } // continue } }
谢谢!!
如果设置NSZombieEnabled
环境变量,则释放的对象将成为实例NSZombie
.它们在下一次消息时抛出,导致代码崩溃和刻录 - 正是您需要调试这种情况.
http://www.cocoadev.com/index.pl?DebuggingAutorelease
更新:对于XCode 4.0,请参阅如何在Xcode中启用NSZombie?
您无法测试对象是否已被释放,因为显然该对象不再与之交谈.但是,如果b
在释放它时(例如,通过执行self.b = nil
)将其设置为nil ,则可以测试nil并创建对象.