这是一个简单的类:
#import "One.h"
#import "Two.h"
@implementation DataFileRegistrar
static NSMutableDictionary *elementToClassMapping;
+ (void)load
{
[self registerClass:[One class] forElement:@"one"];
[self registerClass:[Two class] forElement:@"two"];
}
+ (void)registerClass:(Class)class forElement:(NSString *)element
{
if (!elementToClassMapping) {
elementToClassMapping = [NSMutableDictionary dictionaryWithObject:class forKey:element];
} else {
[elementToClassMapping setValue:class forKey:element];
}
}
+ (id)classForElement:(NSString *)element
{
return [elementToClassMapping valueForKey:element];
}
@end
问题是这个编译器消息:
objc[7172]:类 __NSCFDictionary 的对象 0x6840720 自动释放,没有适当的池 - 只是泄漏 - 中断 objc_autoreleaseNoPool() 进行调试
有什么想法吗?
基本上,我想要一个带有几个类方法和一个静态字典的简单类。它将始终在没有实例化的情况下使用。我想在应用程序启动后立即将它用于一些事情,然后我想释放它的内存。我认为 ARC 可以解决这个问题。
最佳答案
你不应该在静态变量上使用自动释放的对象。
换行...
elementToClassMapping = [NSMutableDictionary dictionaryWithObject:class forKey:element];
到
elementToClassMapping = [[NSMutableDictionary alloc] initWithObjects:[NSArray arrayWithObject:class] forKeys:[NSArray arrayWithObject:element]];
也不要在没有创建自动释放池的情况下从第二个线程调用您的 + (void)registerClass:(Class)class forElement:(NSString *)element
。
关于objective-c - 静态 NSMutableDictionary 是 "just leaking",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10251789/