2011-10-12 89 views
0

我採取了以下代碼,延遲後會調用CFRelease。我已經將它包含在上下文的方法中。什麼是CFRelease for Core Foundation對象的好替代方案?

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

爲什麼會有延遲? – zaph

回答

1

CoreFoundation策略是,如果一個函數在其中包含「Create」一詞,那麼該函數將返回一個擁有(或保留)的對象,調用者負責釋放該對象。所以你的NewPathWithRoundRect方法應該被命名爲CreatePathWithRoundRect,然後放下延遲的CFRelease。調用者將負責在完成它時釋放它。

+0

這樣做的工作。謝謝! – Brennan

相關問題