我正在尝试创建一个简单的幻灯片菜单。
我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
它也可以正常工作。
有人可以启发我如何进行这一轮工作吗?