我需要向 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_id
在 httpReadStream
之前释放是否重要?
最佳答案
好的,根据: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/