覆盖`release`进行调试是否安全?

7 debugging cocoa-touch memory-leaks release objective-c

有时我需要找出一个对象是否真的会被释放.我当然可以使用乐器,但这需要花费很多时间,而且我必须搜索数百万个对象,所以我习惯这样做:

-(void)release {
    NSLog(@"I'm released");
    [super release];
}
Run Code Online (Sandbox Code Playgroud)

但问题是:这样做安全吗?当我覆盖时,我可以遇到任何问题-(void)release.还有,真的void吗?如果我构建我的应用程序以进行分发,但是每次事故都会留在那里呢?还是只是安全吗?谢谢

ken*_*ytm 19

没关系,但请将其限制为仅用于调试.


不是void,但是oneway void.

-(oneway void)release {
    NSLog(@"I'm released"); // <-- remeber the @.
    [super release];
}
Run Code Online (Sandbox Code Playgroud)

请注意,如果您只为NSObject重写此项,那么-release发送到"免费桥接容器"(例如NSCFArray等)的消息将会被遗漏,因为它们也会被覆盖-release以转发到CFRelease.


Lau*_*ble 5

释放消息仅减少实例的引用计数.

如果您想知道实例是否已被释放,那么最好是覆盖dealloc消息:

- (void)dealloc {
    NSLog(@"I am deallocated");
    [super dealloc];
}
Run Code Online (Sandbox Code Playgroud)

明智地使用它.