覆盖“release”进行调试是否安全?
有时我需要查明一个对象是否真的会被释放。我当然可以使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
没关系,但请限制它仅用于调试。
它不是
void
,而是oneway void
。请注意,如果您只为 NSObject 覆盖此设置,则发送到“免费桥接容器”(例如 NSCFArray 等)的
-release
消息将会丢失,因为它们也覆盖了-release
转发到CFRelease
。It's fine, but please restrict it for debugging only.
It's not
void
, butoneway void
.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 toCFRelease
.释放消息仅减少实例的引用计数。
如果您想知道实例是否已被释放,那么最好是覆盖 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:
Use it wisely.