【发布时间】:2017-09-27 09:02:57
【问题描述】:
我有一个 c++ 函数,它获取 std::map 对象并将其转换为 CFMutableDisctionryRef 以便在方法 CFNotificationCenterPostNotification 上使用它。这是我的实现:
void IPCNotificationSender::send(const char *identifier, map<const char *, const char *> dict)
{
NSMutableDictionary *myDict = [NSMutableDictionary dictionary];
CFStringRef cfIdentifier = CFStringCreateWithCString(NULL, identifier,
kCFStringEncodingMacRoman);
for (std::map<const char *, const char *>::iterator it=dict.begin(); it!=dict.end(); ++it)
{
NSString *key = [NSString stringWithUTF8String:it->first];
NSString *val = [NSString stringWithUTF8String:it->second];
myDict[key] = key;
}
CFMutableDictionaryRef myCFDict = (CFMutableDictionaryRef)CFBridgingRetain(myDict);
CFNotificationCenterPostNotification(CFNotificationCenterGetDistributedCenter(), cfIdentifier, NULL, myCFDict, TRUE);
CFRelease(myCFDict);
CFRelease(cfIdentifier);
}
但是,NSString *key 对象中似乎存在内存泄漏,应该自动释放它。我尝试在 Objective-C 函数类型之上实现转换,但仍然得到相同的结果......我倾向于认为 c++ 和 Objective-C 之间的混合虽然有效,但会导致一些 Objective-C 垃圾问题集电极。
我的实施哪里出错了?
谢谢
【问题讨论】:
-
您确定为此来源启用了 ARC 吗?
-
是的,它是根据项目配置启用的:“objective-C自动引用计数=是”
-
其实我仍然不知道为什么上面的代码会导致泄漏...如果您有任何想法,请分享!谢谢
-
查看我的答案为什么它会泄漏。这里的问题是自动释放池,它不是由 C++ 代码运行的。
标签: c++ objective-c macos memory-leaks nsobject