簡體   English   中英

如何在沒有內存泄漏的情況下返回CFDataRef?[ios]

[英]How to return CFDataRef without memory leak?[ios]

當我返回CFDataRef

(CFDataRef)MyFunction{
    .....
    CFDataRef data = CFDataCreate(NULL, buf, bufLen);
    free(buf);
    return data;
}

有內存泄漏,如何使CFDataRef自動釋放? 方法[data autorelease]不會退出。

您無法自動釋放Core Foundation對象。 (但是,您可以自動釋放支持免費橋接的Core Foundation對象,例如CFDataRef;請參閱下面的@ newacct的答案。)

Objective-C約定是為您的方法命名,使其以單詞new開頭,表示調用者負責釋放其返回值。 例如:

+ (CFDataRef)newDataRef {
    return CFDataCreate(...);
}

CFDataRef myDataRef = [self newDataRef];
...
CFRelease(myDataRef);

如果符合此命名約定,Xcode靜態分析器將正確標記Core Foundation內存管理問題。

如何使CFDataRef自動釋放? 方法[data autorelease]不會退出。

只需將其autorelease轉換為對象指針類型即可調用autorelease

-(CFDataRef)MyFunction{
    .....
    CFDataRef data = CFDataCreate(NULL, buf, bufLen);
    free(buf);
    return (CFDataRef)[(id)data autorelease];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM