保留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代码完全相同。

+0

谢谢!我编辑了我的问题,让我知道是否有更好的方法 –

+0

@ThomasJoulin:你的解决方案很好,除非你没有在setter中释放'_coreTextFrame'的旧值。你应该做一些像'CFRetain(coreTextFrame); if(_coreTextFrame)CFRelease(_coreTextFrame); _coreTextFrame = coreTextFrame'(如果参数是当前值)。在'-dealloc'中,你应该确保'_coreTextFrame'在释放之前不是'NULL',因为'CFRelease(NULL)'会崩溃。 –