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.
释放消息仅减少实例的引用计数.
如果您想知道实例是否已被释放,那么最好是覆盖dealloc消息:
- (void)dealloc {
NSLog(@"I am deallocated");
[super dealloc];
}
Run Code Online (Sandbox Code Playgroud)
明智地使用它.
| 归档时间: |
|
| 查看次数: |
3467 次 |
| 最近记录: |