我正在编写一种方法将C ++ std::map<std::string,std::string>
转换为NSDictionary
,如下所示:
NSDictionary* NSDictionaryFromMap(const StringMap& map){
NSMutableDictionary * dict = [NSMutableDictionary dictionary];
NSLog(@"NSDictonaryFromMap() - size:%d", (int)map.size());
for (auto it = map.begin(); it != map.end(); it++){
NSString * key = (0 == it->first.length())?(@""):(@(it->first.c_str()));
NSString * value = (0 == it->second.length())?(@""):(@(it->second.c_str()));
[dict setObject:value forKey:key];
NSLog(@"NSDictonaryFromMap() - key:%@ value:%@", key, value);
}
NSDictionary * nd = [NSDictionary dictionaryWithDictionary:dict];
dict = NULL;
NSLog(@"NSDictonaryFromMap() - dictionary:%@", nd);
return nd;
}
但是在调用此方法时我遇到了一些内存泄漏。对不起,我不能在这里发布图片。在仪器中,它突出显示四个函数调用的内存泄漏
NSMutableDictionary * dict = [NSMutableDictionary dictionary];
NSString * key = (0 == it->first.length())?(@""):(@(it->first.c_str()));
NSString * value = (0 == it->second.length())?(@""):(@(it->second.c_str()));
[dict setObject:value forKey:key];
在iOS 7和iOS 8上,没有任何内存泄漏,但在iOS 6上,它有。 如何修复iOS6的漏洞?
我也在Apple论坛上发布了这个问题: https://devforums.apple.com/message/1114878#1114878
答案 0 :(得分:0)
从你所说的,似乎返回的字典被泄露了。
答案 1 :(得分:-1)
我不太了解iOS,但我发现你正在使用
NSString * key = (0 == it->first.length())?(@""):(@(it->first.c_str()));
NSString * value = (0 == it->second.length())?(@""):(@(it->second.c_str()));
但不知道发布它的位置。 对于每个循环,它将创建2个指针并且不会释放它。 我不知道我的意见是否正确,但我只看到那里。希望它会对你有所帮助。