2012-08-03 48 views
2

我有一個簡單方法,該方法從它接受一個CTFramesetterRef對象並建立一個CTTextFrameRef如下:CoreGraphics在管理內存/ CoreText與返回值

- (CTFrameRef) createFrameRefWithFramesetterRef:(CTFramesetterRef)framesetterRef 
{ 
    CTFrameRef frameRef = CTFramesetterCreateFrame(framesetterRef, CFRangeMake(0, 0), self.mutablePathRef, NULL); 
    return frameRef; 
} 

然後,在另一種方法中我進行呼叫上述方法:

- (void) someMethod 
{ 
    CTFramesetterRef framesetterRef = CTFramesetterCreateWithAttributedString((CFMutableAttributedStringRef)self.text); 
    CTFrameRef newFrameRef = [self createFrameRefWithFramesetterRef:framesetterRef]; 
    //do some stuff 
    CTRelease(newFrameRef); 
    CTRelease(framesetterRef); 
} 

我只是想確認我管理的內存正確這裏我是新來與CoreGraphics工作。當調用CTFramesetterCreateFrame時,會自動調用保留frameRef。自從它存儲在newFrameRef中並且保留計數保持不變時,我不必擔心釋放frameRef。我不得不擔心的是釋放newFrameRefCTRelease(newFrameRef))。它是否正確?

更新:我其實仍然得到來自該內存泄漏,一個在與回線和一個在那裏我釋放「newFrameRef」

回答

1

C-API接口的把他們的線索從舊Foundarion套件命名指南,它有兩個不同的(有用的)命名約定稱爲Get RuleCreate Rule。爲了簡潔起見,任何含有create這個詞的C函數都會返回一個必須手動管理的引用。所以要回答你的問題,是的,你需要釋放CTFramesetterRef,因爲你現在手上有泄漏。

+0

忘記釋放CTFramesetterRef只是我的一個疏忽,我改變了這一點。再次感謝! – 2012-08-03 05:59:38

+0

沒問題。無論如何,目標c的c部分記錄很差。 – CodaFi 2012-08-03 06:15:13