我已经采用了以下代码,这些代码会在延迟后调用CFRelease。我已将其包含在上下文方法中。
CGPathRef NewPathWithRoundRect(CGRect rect, CGFloat cornerRadius)
{
// other work to create ref which is a CGPath
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.5 * NSEC_PER_SEC), dispatch_get_current_queue(), ^{
CFRelease(ref);
});
}
在最新版本的Xcode中,我收到有关未正确释放内存的警告。调用者获取值,使用它然后调用CFRelease。我现在CFRetain它也CFRelease它,以便将引用计数降低到零我设置此调度运行并清理引用。
我对这种做法不满意。是否有更好的模式用于返回在方法中创建并需要返回的CF对象?我应该在方法之外创建路径并将其作为参数传递,以便由调用者创建和释放它吗?
我还将我的代码更改为调用CGPathRelease,这更安全一些。任何建议都表示赞赏。
答案 0 :(得分:1)
CoreFoundation策略是,如果函数中包含单词“Create”,则该函数返回一个拥有(或保留)对象,调用者负责释放该对象。因此,您的NewPathWithRoundRect
方法应命名为CreatePathWithRoundRect
,然后删除延迟的CFRelease。调用者将负责在完成后释放它。