Objective-C - 测试被解除分配/释放的对象实例

jlp*_*ita 7 cocoa cocoa-touch objective-c

有一些方法可以测试一个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
}
}
Run Code Online (Sandbox Code Playgroud)

谢谢!!

小智 13

如果设置NSZombieEnabled环境变量,则释放的对象将成为实例NSZombie.它们在下一次消息时抛出,导致代码崩溃和刻录 - 正是您需要调试这种情况.

http://www.cocoadev.com/index.pl?DebuggingAutorelease

更新:对于XCode 4.0,请参阅如何在Xcode中启用NSZombie?


Chu*_*uck 11

您无法测试对象是否已被释放,因为显然该对象不再与之交谈.但是,如果b在释放它时(例如,通过执行self.b = nil)将其设置为nil ,则可以测试nil并创建对象.