2
- (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];
                     }];
}

我认为当我将 ARC 添加到rootViewController. 当我运行动画完成时,ARC 应该释放“飞溅”,因为它会从它自己的超级视图中删除我的“飞溅”。但是,我可以在分配工具中看到这个父视图控制器保持分配状态,并且它显示问题行是在哪里添加了 splash 到rootViewController. 我能做些什么来确保“飞溅”被释放?

4

1 回答 1

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 相关视图提出的一个小技巧。我更推荐它作为最后的手段,因为这确实应该以适当的方式解决,但值得一试,以免你扯掉头发!

于 2012-06-25T19:36:25.290 回答