有时我需要找出一个对象是否真的会被释放。我当然可以使用乐器,但这需要花费很多时间,而且我必须搜索数百万个对象,所以我习惯这样做:
-(void)release {
NSLog(@"I'm released");
[super release];
}
但问题是:安全吗?当我覆盖-(void)release
时,我可以遇到任何问题吗?还有,真的是void
吗?如果我构建我的应用程序以进行分发,但是每次事故都会留在那里呢?还是只是安全吗?感谢
答案 0 :(得分:19)
没关系,但请将其限制为仅用于调试。
不是void
,而是oneway void
。
-(oneway void)release {
NSLog(@"I'm released"); // <-- remeber the @.
[super release];
}
请注意,如果您只为NSObject重写此项,那么发送到“免费桥接容器”的-release
消息(例如NSCFArray等)将会被忽略,因为它们也会覆盖{{1}转发到-release
。
答案 1 :(得分:5)
释放消息仅减少实例的引用计数。
如果您想知道实例是否已被释放,那么最好是覆盖dealloc消息:
- (void)dealloc {
NSLog(@"I am deallocated");
[super dealloc];
}
明智地使用它。