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 は、独自のスーパー ビューから「スプラッシュ」を削除するため、アニメーションの完了を実行すると「スプラッシュ」を解放する必要があります。ただし、割り当てインストルメントで、この親ビュー コントローラーが割り当てられたままになっていることがわかり、スプラッシュが に追加されている場所に問題があることがわかります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 に答える