仪器报告此方法100%泄漏:
+(void)initialize{
mapper = [[NSMutableDictionary alloc] init];
}
假设乐器没有报告误报,可能会出现什么情况?多线程(虽然文档说它是以“线程安全的方式”调用的)?
这是非ARC。
答案 0 :(得分:2)
问题(假设非ARC环境)是您为mapper
分配内存,但您永远不会释放它。
答案 1 :(得分:1)
使用自动释放池:
+(void)initialize {
@autoreleasepool {
mapper = [[NSMutableDictionary alloc] init];
}
}
在这种情况下,对象的创建可以导致自动释放的对象(例如,在NSMutableDictionary的实现中内部或临时)。当然,如果这是问题,你会在控制台中看到“...自动释放没有池 - 只是泄漏”消息。
您还应该考虑懒惰地初始化共享/全局内容,或者在应用完成启动后。
如果您没有看到这些消息,那么这将不适用。
答案 2 :(得分:1)
问题是上面有这个类的子类。在alloc
块中的initialize
中设置dispatch_once
可修复泄漏。
This post帮助找出了initialize
。