문제

When I return a CFDataRef by

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

There is a memory leak, how to make CFDataRef autorelease? the method [data autorelease] doesn't exit.

도움이 되었습니까?

해결책

You can't autorelease Core Foundation objects. (However, you can autorelease Core Foundation objects that support toll-free bridging such as CFDataRef; see @newacct's answer below.)

The Objective-C convention is to name your method such that it starts with the word new to indicate that the caller is responsible for releasing its return value. For example:

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

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

If you conform to this naming convention, the Xcode static analyzer will correctly flag Core Foundation memory managment issues.

다른 팁

how to make CFDataRef autorelease? the method [data autorelease] doesn't exit.

Simply cast it to an object pointer type in order to call autorelease:

-(CFDataRef)MyFunction{
    .....
    CFDataRef data = CFDataCreate(NULL, buf, bufLen);
    free(buf);
    return (CFDataRef)[(id)data autorelease];
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top