Я столкнулся с проблемной утечкой, которая, благодаря Instruments, кажется, исходит от CTFrameSetterCreateWithAttributedString. Стек вызовов ниже.
1 CoreText -[_CTNativeGlyphStorage prepareWithCapacity:preallocated:]
2 CoreText -[_CTNativeGlyphStorage initWithCount:]
3 CoreText +[_CTNativeGlyphStorage newWithCount:]
4 CoreText TTypesetterAttrString::Initialize(__CFAttributedString const*)
5 CoreText TTypesetterAttrString::TTypesetterAttrString(__CFAttributedString const*)
6 CoreText TFramesetterAttrString::TFramesetterAttrString(__CFAttributedString const*)
7 CoreText CTFramesetterCreateWithAttributedString
Код, генерирующий этот стек вызовов:
CFAttributedStringRef attrRef = (CFAttributedStringRef)self.attributedString;
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(attrRef);
CFRelease(attrRef);
...
CFRelease(framesetter);
self.attributedString выпускается в другом месте. Я чувствую, что правильно публикую все остальное... Учитывая все это, откуда может быть утечка? Для моих целей это довольно существенно - 6-10 МБ на поп. Спасибо за любую помощь.
self.attributedString gets released elsewhere
, а отпускаетеattrRef
во фрагменте кода выше. Возможно, именно ваш выпуск этого объекта дважды вызывает некоторые другие проблемы, которые влияют на другой код, а CFRelease вообще не вызывается, просто предположение... - person neevek   schedule 11.05.2012CFRelease()
просто выпускает объекты Core Foundation, а любые объекты Cocoa (например, NSAttributedString) должны выпускаться отдельно. - person beaudrykock   schedule 11.05.2012(CFAttributedStringRef)self.attributedString
похоже на(__bridge CFAttributedStringRef)self.attributedString
, который не передает право собственности наself.attributedString
другомуCFAttributedStringRef
, так что вам не следовало звонитьCFRelease
наattrRef
. Если вы хотите управлять освобождением памяти объекта на стороне Core Foundation, вам нужны__bridge__transfer
илиCFRetain
, но я не думаю, что вы должны это делать. - person neevek   schedule 11.05.2012CFRelease
наattRef
, но это не решает проблему (к сожалению!) - person beaudrykock   schedule 11.05.2012