变更记录
序号 | 录入时间 | 录入人 | 备注 |
---|---|---|---|
1 | 2017-06-27 | Alfred Jiang | - |
方案名称
内存管理 - 使用 retain 找出对象的持有者
关键字
内存管理 \ retain \ 对象持有者 \ 内存泄露
需求场景
- 通过获取对象的引用图来确定持有者,从而发现并解决内存泄露问题
参考链接
详细内容
如果想要找出对象的持有者,可以通过 MRC 的 retain 方法
第一步:确定需要追踪的对象为 MRC,如果工程是基于 ARC 开发的,可以在工程配置中关闭需要追踪的对象对应类文件的 ARC
在 工程 -> TARGETS -> Build Phases -> Compile Sources
中设置对应类文件的 Compiler Flags
为 -fno-objc-arc
即可
第二步:将以下代码添加到所要追踪的自定义类中
#if !__has_feature(objc_arc)
- (id)retain
{
NSLog(@"%s %@",__PRETTY_FUNCTION__,[NSThread callStackSymbols]);
return [super retain];
}
#endif
这段代码不仅会记录对 retain 方法的调用情况,还会将调用栈打印出来。因此,除了调用次数,还可以得到精确的调用明细。
效果图
(无)
备注
(无)