0

我正在尝试创建一个简单的幻灯片菜单。

NSView为它创建了一个应用高斯模糊CALayer

//菜单initWithFrame方法。

m_blur = [CIFilter filterWithName:@"CIGaussianBlur"];
[m_blur setDefaults];
[m_blur setValue: [NSNumber numberWithFloat:7] forKey:@"inputRadius"];
m_backgroundFiltersArray = [NSArray arrayWithObject:m_blur];

- (void)setVisible:(BOOL)bVisible
{
    @autoreleasepool
    {
        if (!bVisible)
        {
            [self.layer setBackgroundFilters:nil];
            [self.layer.superlayer setBackgroundFilters:nil];
        }
        else
        {
            [self.layer setBackgroundFilters:m_backgroundFiltersArray];
            //Also Update the Driver's Parameters here.
        }
    }
    [self setNeedsDisplay:YES];
}

在我的应用程序主视图中,我正在调用这样的菜单

用 Frame 初始化

m_menuView = [[MenuView alloc]initWithFrame:NSMakeRect(-fcMenuWidth, 0, fcMenuWidth, 446.0)];
[m_menuView setDelegate:self];
[self addSubview:m_menuView];


- (void)summonMenu
{
    if(!m_bMenuUp)
    {
        m_bMenuUp = YES;
        [m_menuView setVisible:YES];
        [[m_menuView animator] setFrame:NSMakeRect(0, 0, fcMenuWidth, self.frame.size.height)];
    }
}
- (void)hideMenu
{
    if (m_bMenuUp)
    {
        m_bMenuUp = NO;
        [m_menuView cancelPopUpButtons];

        [[m_menuView animator] setFrame:NSMakeRect(-fcMenuWidth, 0, fcMenuWidth, self.frame.size.height)];
        [m_menuView setVisible:NO];
    }
}

但是,每次我隐藏或召唤菜单时,我都会有一些内存泄漏。

我试图在 Instruments 中对其进行分析——它讲述了OpenGL每次大约有 768 字节泄漏的上下文。

我玩弄了一些函数,发现当我在m_menuView setFrame:没有.animator属性的情况下调用它时一切正常,并且没有发生泄漏。此外,如果我禁用CIFilter并使用animator它也可以正常工作。

有人可以启发我如何进行这一轮工作吗?

在此处输入图像描述

在此处输入图像描述

4

0 回答 0