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

时间:2014-07-14 09:42:07

标签: c core-foundation cfnetwork

我需要向CFNumberRef提供CFReadStreamSetProperty()类型的值。我正在使用CFReadStream返回的CFReadStreamCreateForHTTPRequest()。我应该在CFRelease()上致电CFNumberRef,还是必须保留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_id之前发布httpReadStream是否重要?

1 个答案:

答案 0 :(得分:0)

好的,根据:https://developer.apple.com/library/mac/documentation/CoreFoundation/Conceptual/CFMemoryMgmt/Concepts/Ownership.html,似乎我应该致电CFRelease(),因为它说:

基本规则的必然结果是当你将一个对象传递给另一个对象(作为一个函数参数)时,你应该期望接收者在需要维护传递对象时将获得它的所有权。 / em>的

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