我需要向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之前发布,这有关系吗?
发布于 2015-01-26 06:58:27
好的,根据:https://developer.apple.com/library/mac/documentation/CoreFoundation/Conceptual/CFMemoryMgmt/Concepts/Ownership.html,似乎我应该调用CFRelease(),因为它说:
基本规则的一个推论是,当您将一个对象(作为函数参数)传递给另一个对象时,如果需要维护传递的对象,您应该预期接收者将获得该对象的所有权。
因此,如果CFReadStreamSetProperty()将来想要使用我的对象,它应该调用CFRetain()。
https://stackoverflow.com/questions/24733606
复制相似问题