保留CTFrameRef属性使用ARC
问题描述:
使用ARC,我如何确保CTFrameRef
属性没有被释放?我目前使用的assign
财产,这显然是没有做什么我想保留CTFrameRef属性使用ARC
编辑:基于@KevinBallard回答我的解决方案:
- (void)setCoreTextFrame:(CTFrameRef)coreTextFrame
{
_coreTextFrame = CFRetain(coreTextFrame);
}
- (void)dealloc
{
CFRelease(_coreTextFrame);
}
答
CTFrameRef
不是OBJ-C目的。它遵循CoreFoundation内存管理规则,因此您可以使用CFRetain()
来保留它,并使用CFRelease()
发布它。
因此,基本上,您处理CTFrameRef
的代码看起来与非ARC代码完全相同。
谢谢!我编辑了我的问题,让我知道是否有更好的方法 –
@ThomasJoulin:你的解决方案很好,除非你没有在setter中释放'_coreTextFrame'的旧值。你应该做一些像'CFRetain(coreTextFrame); if(_coreTextFrame)CFRelease(_coreTextFrame); _coreTextFrame = coreTextFrame'(如果参数是当前值)。在'-dealloc'中,你应该确保'_coreTextFrame'在释放之前不是'NULL',因为'CFRelease(NULL)'会崩溃。 –