objective-c - 静态 NSMutableDictionary 是 "just leaking"

标签 objective-c ios xcode macos

这是一个简单的类:

#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/

相关文章:

xcode - 如何获取适用于 Xcode 的旧版 Mac OSX SDK?

ios - 为什么更改文本字段中的文本需要替换字符?

swift - TextBox 在堆栈 View Xcode 中拉伸(stretch)

iOS:当数据来自网络服务作为响应时,如何获取多个经度和纬度的位置名称?

ios - 多线程时 UITableView 无响应

iphone - 在搜索方法迭代完成后重新加载/显示 UISearchDisplayController 的 searchResultsTableView

iphone - MailCore SMTP 服务器证书无效

iOS 应用程序需要设计一种灵活而优雅的方式来向应用程序内不同位置的用户弹出惊喜礼物消息

ios - 将 JS MessageMedia 数据与核心数据一起使用

ios - 以编程方式添加的 UITableView 不会填充数据