c - 作为值提供给 CFReadStreamSetProperty() 的对象的生命周期

标签 c core-foundation cfnetwork

我需要向 CFReadStreamSetProperty() 提供 CFNumberRef 类型的值。我正在使用由 CFReadStreamCreateForHTTPRequest() 返回的 CFReadStream。我应该通过我的 CFNumberRef 调用 CFRelease(),还是必须保留 CFNumberRef 直到 CFReadStream 存在?

我的代码如下:

void func(..., const long long id)
{
    //...
    CFReadStreamRef httpReadStream =  CFReadStreamCreateForHTTPRequest(...);
    //...
    CFNumberRef cf_id = CFNumberCreate(kCFAllocatorDefault, kCFNumberLongLongType,
                                       &id);
    CFReadStreamSetProperty(httpReadStream, CFSTR("myId"), cf_id);
}

那么我应该调用 CFRelease(cf_id) 吗?cf_idhttpReadStream 之前释放是否重要?

最佳答案

好的,根据:https://developer.apple.com/library/mac/documentation/CoreFoundation/Conceptual/CFMemoryMgmt/Concepts/Ownership.html ,看来我应该调用 CFRelease(),因为正如它所说:

基本规则的推论是,当您将一个对象传递给另一个对象(作为函数参数)时,您应该期望接收者如果需要维护它,将获得所传递对象的所有权。

因此,如果 CFReadStreamSetProperty() 将来想使用我的对象,则应该调用 CFRetain()

关于c - 作为值提供给 CFReadStreamSetProperty() 的对象的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24733606/

相关文章:

c - 对函数指针的 undefined reference

c - sizeof(*v) 在 C 中意味着什么?

c++ - OpenSSL C API : How to resume TLS connection after program exec()?

c - OSX 命令行 C 应用程序中的线程管理

ios - 我如何确定 App Transport Security 阻止了哪个 URL?

ios - CFNetwork/AppleJPEG 崩溃

c - 未定义的操作

cocoa - 运行循环不处理事件

swift - Extra\N{...} 使用 kCFStringTransformToUnicodeName 或 NSStringTransformToUnicodeName 时

iphone - Apple 的 Reachability 类是否有更复杂的替代品?