使用MDQueryRef调用时CFR释放EXC_BAD_ACCESS

杰西克斯
StringArray NativeSearch::search(const String &filenameglob) {

    CFStringRef queryString = jcf_getMDQueryString(filenameglob);

    MDQueryRef query;
    query = MDQueryCreate(kCFAllocatorDefault, queryString,
                          nullptr, nullptr);
    CFRelease(queryString);

    if (query == NULL) return StringArray();


    MDQueryExecute(query, kMDQuerySynchronous);

    int resultCount = MDQueryGetResultCount(query);
    StringArray result;

    for (CFIndex i = 0; i < resultCount; ++i) {
        const MDItemRef r = (const MDItemRef) MDQueryGetResultAtIndex(query, i);
        CFStringRef filename = (CFStringRef) MDItemCopyAttribute(r,
                                                                 CFSTR("kMDItemFSName"));
        DBG("found: " + String::fromCFString(filename));
        CFRelease(r);
        CFRelease(filename);
    }

    CFRelease(query);  // <<< EXC_BAD_ACCESS
    return result;
}

关于这个问题的任何建议。我期待有所谓CFRelease()查询查询与MDQueryCreate创建。Apple文档建议对Create函数的结果进行处理是正确的。

但是我崩溃了。否则,代码将按预期工作。

对这个有什么想法吗?

杰西克斯

问题解决了。

    CFRelease(r);

正在释放MDQuery实际拥有的MDItem。这是个错误。这意味着稍后,当我调用CFRelease(query)时,MDItem将再次释放。这会导致崩溃。

上课?

  • 在调试时,我应该查看可能会影响我的MDQuery的每个操作。相反,我只专注于直接命名查询对象的操作。
  • 不要CFRelease(...)通过名为GetSomething的函数名称获得的任何东西。

引用苹果:

Core Foundation函数的名称指示您何时拥有返回的对象:

名称中嵌入了“创建”的对象创建函数;

名称复制中嵌入了“复制”的对象复制功能。

如果您拥有一个对象,则有责任在完成使用后放弃所有权(使用CFRelease)。

但是:当您通过名称中具有Get的函数获得对对象的引用时,则不是这样

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么有时从 DISpatchQueue 调用时会出现 EXC_BAD_ACCESS?

来自分类Dev

exc_bad_access code = 1从viewDidLoad移动方法调用时

来自分类Dev

EXC_BAD_ACCESS为什么我的对象被释放?

来自分类Dev

EXC_BAD_ACCESS 使用instantiateViewController 時

来自分类Dev

递归调用块时为EXC_BAD_ACCESS

来自分类Dev

调用函数时迅速EXC_BAD_ACCESS

来自分类Dev

引用自身时迅速调用AFNetworkReachabilityManager EXC_BAD_ACCESS

来自分类Dev

调用GLeeInit()会得到EXC_BAD_ACCESS

来自分类Dev

EXC_BAD_ACCESS在mergeChangesFromContextDidSaveNotification

来自分类Dev

斯威夫特:EXC_BAD_ACCESS

来自分类Dev

SKTexture EXC_BAD_ACCESS

来自分类Dev

EXC_BAD_ACCESS StringWithFormat

来自分类Dev

为什么在构造函数中释放会导致EXC_BAD_ACCESS?

来自分类Dev

使用 Default::default() 時的 EXC_BAD_ACCESS

来自分类Dev

在代码中添加UINavigationController时使用EXC_BAD_ACCESS

来自分类Dev

使用数组C ++时的“ EXC_BAD_ACCESS”

来自分类Dev

EXC_BAD_ACCESS:使用 std::array 的问题

来自分类Dev

在performSelectorInBackground上为EXC_BAD_ACCESS

来自分类Dev

EXC_BAD_ACCESS错误OpenCV?

来自分类Dev

didSet导致EXC_BAD_ACCESS

来自分类Dev

EXC_BAD_ACCESS而[WKInterfaceTable setNumberOfRows:withRowType]

来自分类Dev

setMask上的EXC_BAD_ACCESS

来自分类Dev

heightForRowAtIndexPath iOS中的EXC_BAD_ACCESS

来自分类Dev

fscanf中的Exc_bad_access错误

来自分类Dev

指向函数头的EXC_BAD_ACCESS

来自分类Dev

NSNumber objCType EXC_BAD_ACCESS

来自分类Dev

委托分配导致EXC_BAD_ACCESS

来自分类Dev

UITextFieldDelegate崩溃(exc_bad_access)

来自分类Dev

removeConnection结果为EXC_BAD_ACCESS