- (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
的位置。我该怎么做以确保释放“飞溅”?
答案 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相关视图提出的一个小技巧。我推荐它作为最后的手段,因为真的应该以适当的方式解决,但是值得一试,以免你撕掉你的头发!