这条线
return (__bridge DCSDictionaryRef)d;
给我一个“与本地变量关联的堆栈内存的地址重定为调用者?”警告。理想情况下,我认为我应该创建DCSDictionaryRef
实例的新副本,但我对它是如何工作绝对无能为力。
非常感谢任何提示/帮助我如何摆脱警告(以及潜在的泄漏或中途收集的物体)。
P.S。 DCSCopyAvailableDictionaries
和DCSDictionaryGetShortName
是CoreFoundation中“未记录的”函数之一。
DCSDictionaryRef _DCSDictionary() {
NSArray *dicts = DCSCopyAvailableDictionaries();
for (NSObject *d in dicts) {
NSString *sn = DCSDictionaryGetShortName((__bridge DCSDictionaryRef)d);
NSLog(@"%@", sn);
if ([sn isEqualToString:@"Thesaurus"]) {
return (__bridge DCSDictionaryRef)d;
}
}
return NULL;
}
答案 0 :(得分:1)
我相信您需要以下其中一项:
copy
函数这是Apple documentation about memory management for CoreFoundation。要点是,您需要一个适用于您正在使用的数据类型的Copy
函数。看看您是否可以找到并调用DCSDictionaryRef复制功能。链接文档中的示例是名为CFStringCreateCopy
的函数将用于复制CFString对象。
我之前从未尝试过类似的东西,但是可以归档对象(假设你能够知道它的大小),但这也需要知道哪些位代表指针,然后将对象归档指针同样指出,这也需要知道这些对象的类型和大小。如果你能够成功地存档它,那么你可能有机会在内存中的其他位置取消存档。
我认为这是一个非常深的兔子洞。