首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何自动发布CGLayer?

如何自动发布CGLayer?
EN

Stack Overflow用户
提问于 2011-02-15 06:52:33
回答 1查看 320关注 0票数 1

我将CGLayers缓存在NSMutableDictionary中,在其中使用它们,如下所示:

代码语言:javascript
复制
- (CGLayerRef)getLayerForCacheKey:(CacheKey)cacheKey andProperty:(id)property {
    NSDictionary *cacheDict = [cacheArray objectAtIndex:cacheKey];
    if (cacheDict) {
        NSValue *encodedLayer = [cacheDict objectForKey:property];
        if (encodedLayer) {
            CGLayerRef returnedLayer = nil;
            [encodedLayer getValue:&returnedLayer];
            return returnedLayer;
        }
    }
    return nil;
}

- (void)saveLayer:(CGLayerRef)layer toCacheWithKey:(CacheKey)cacheKey andProperty:(id)property {
    CGLayerRef layerToSave = CGLayerRetain(layer);
    NSMutableDictionary *cacheDict = [cacheArray objectAtIndex:cacheKey];
    NSValue *encodedLayer = [[NSValue alloc] initWithBytes:&layerToSave objCType:@encode(CGLayerRef)];
    [cacheDict setObject:encodedLayer forKey:property];
    [encodedLayer release];
}

我想我这里有一个内存泄漏,不是getLayerForCacheKey.的CGLayerRelease returnedLayer我们有什么方法可以自动释放它们吗?

代码语言:javascript
复制
CacheKey key = CacheKeyFretNumberHighlight;
CGLayerRef numberLayer = [cacheManager getLayerForCacheKey:key andProperty:note];
// save to cache
if (!numberLayer) {
    numberLayer = CGLayerCreateWithContext(nil, [numberStr sizeWithFont:font], nil);
    CGContextRef numberLayerCtx = CGLayerGetContext(numberLayer);
    UIGraphicsPushContext(numberLayerCtx);
    CGContextSetFillColorWithColor(numberLayerCtx, highlightColor);
    [numberStr drawAtPoint:CGPointZero withFont:font];
    UIGraphicsPopContext();

    [cacheManager saveLayer:numberLayer toCacheWithKey:key andProperty:note];

    CGContextDrawLayerAtPoint(layerCtx, point, numberLayer);
    CGLayerRelease(numberLayer);

} else {
    CGContextDrawLayerAtPoint(layerCtx, point, numberLayer);
}
EN

回答 1

Stack Overflow用户

发布于 2011-02-15 07:37:52

不幸的是,这里没有CFAutorelease。如何更改缓存检索方法的名称,以清楚地显示您正在返回一个副本?

代码语言:javascript
复制
- (CGLayerRef) copyLayerForCacheKey: (CacheKey) key andProperty: (id) property;

那么,即使是静态分析器也应该理解两者之间的区别。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5000684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档