我的对象没有被释放

时间:2012-05-14 20:49:05

标签: ios memory-management automatic-ref-counting

- (void)fadeOutSplash {
    UIImageView *splash = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Default-Landscape~ipad.png"]];
    [self.window.rootViewController.view addSubview:splash]; // <-- OBJECT IS BEING RETAINED HERE

    [UIView animateWithDuration:0.5 
                     animations:^{
                         splash.alpha = 0;
                     }
                     completion:^(BOOL finished) {
                         [splash removeFromSuperview];
                     }];
}

当我将它添加到rootViewController的子视图时,我认为ARC保留了我的“泼水”。当我运行动画完成时,ARC应该释放“泼溅”,因为它会从它自己的超级视图中删除我的“闪现”。但是,我可以在分配工具中看到此父视图控制器保持分配状态,并显示问题行是将{splash}添加到rootViewController的位置。我该怎么做以确保释放“飞溅”?

1 个答案:

答案 0 :(得分:0)

我解决了这个问题,但我不确定如何......这是可能的解决方案:

- (void)removeFromSuperView
{
    // Use this space to manually release any non IB pointers / variables as needed
    self.someDictionaryIMadeInInit = nil;

    while(self.subviews.count > 0) [[self.subviews objectAtIndex:0] removeFromSuperView];
    [super removeFromSuperView];
}

这是我为ARC相关视图提出的一个小技巧。我推荐它作为最后的手段,因为真的应该以适当的方式解决,但是值得一试,以免你撕掉你的头发!