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

发布于 2024-08-29 19:27:19 字数 323 浏览 4 评论 0原文

有时我需要查明一个对象是否真的会被释放。我当然可以使用 Instruments,但这需要很多时间,而且我必须搜索数百万个对象,所以我曾经这样做:

-(void)release {
    NSLog(@"I'm released");
    [super release];
}

但问题是:这样做安全吗?当我覆盖 -(void)release 时,我会遇到任何问题吗?另外,它真的是void吗?如果我构建了用于分发的应用程序,但万一不小心将其留在那里怎么办?或者只是安全?谢谢

Sometimes I need to find out if an object will really be released. I could use Instruments of course, but that takes much time, and I have to search into millions of objects, so I used to do this:

-(void)release {
    NSLog(@"I'm released");
    [super release];
}

But the problem is: is this safe to do? Can I get any problems when I override -(void)release. Also, is it really void? And what if I build my application for distribution, but per accident leave it there? Or is it just safe? Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

ま柒月 2024-09-05 19:27:20

没关系,但请限制它仅用于调试。


它不是void,而是oneway void

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

请注意,如果您只为 NSObject 覆盖此设置,则发送到“免费桥接容器”(例如 NSCFArray 等)的 -release 消息将会丢失,因为它们也覆盖了 -release 转发到 CFRelease

It's fine, but please restrict it for debugging only.


It's not void, but oneway void.

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

Note that if you only override this for NSObject, then the -release messages sent to "toll-free bridged containers" (e.g. NSCFArray, etc.) will be missed since they've also overridden -release to forward to CFRelease.

祁梦 2024-09-05 19:27:20

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

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

- (void)dealloc {
    NSLog(@"I am deallocated");
    [super dealloc];
}

明智地使用它。

The release message only decrements the reference count of the instance.

If you want to know if the instance has been released, then the best is to override the dealloc message:

- (void)dealloc {
    NSLog(@"I am deallocated");
    [super dealloc];
}

Use it wisely.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文