变更记录

序号 录入时间 录入人 备注
1 2017-06-27 Alfred Jiang -

方案名称

内存管理 - 使用 retain 找出对象的持有者

关键字

内存管理 \ retain \ 对象持有者 \ 内存泄露

需求场景

  1. 通过获取对象的引用图来确定持有者,从而发现并解决内存泄露问题

参考链接

  1. 《高性能 iOS 应用开发》

详细内容

如果想要找出对象的持有者,可以通过 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 方法的调用情况,还会将调用栈打印出来。因此,除了调用次数,还可以得到精确的调用明细。

效果图

(无)

备注

(无)

results matching ""

    No results matching ""