2

メソッドを追加NSNotificationCenterして削除しましたが、削除されません。私はARCをフォローしています。私はいくつかの答えに従いましたが、運がありませんでした。私はコメントを与えるという評判がないので、何かを投稿することは重複しているように見えます。投票しないでください。viewDidLoadviewDidUnload

サンプルコード:

- (void)viewDidLoad
{     
    [[NSNotificationCenter defaultCenter ] addObserver:self.containerView
                                              selector:@selector(loadInitialScreen)
                                                  name:CLEARSCREEN_DEPOSIT  
                                                object:NULL];
}

- (void)viewDidUnload
{
    [[NSNotificationCenter defaultCenter] removeObserver:self.containerView
                                                    name:CLEARSCREEN_DEPOSIT 
                                                  object:nil];

}
4

3 に答える 3

4

必要に応じて-viewWillDisappear:-viewDidDisappear:またはメソッドでオブザーバーを削除する必要があります。-deallocその理由は-viewDidUnload、iOS6 以降では呼び出されなくなり、iOS6 より前ではメモリ警告が受信されたときに呼び出されるためです。

于 2013-02-27T07:29:11.780 に答える
1

viewDidDisappear代わりに使用してみてくださいviewDidUnload:

-(void)viewDidDisappear:(BOOL)animated
{
    [[NSNotificationCenter defaultCenter] removeObserver:self.containerView
                                                    name:CLEARSCREEN_DEPOSIT object:nil];
    [super viewDidDisappear:animated];
}
于 2013-02-27T07:23:09.610 に答える
0

viewDidUnload は (iOS 6.0 未満の場合)、アプリケーション/ビュー コントローラーがメモリ警告を受け取ると呼び出されます。ビューを削除するために呼び出されることはありません。その理由は、dealloc が呼び出されるためです。ただし、ARC を使用しているため、dealloc メソッドを実装することはできません。

loadInitialScreenメソッドを 1 回だけ呼び出す必要がある場合は、メソッド内のオブザーバーを削除することをお勧めします。

通知を複数回投稿できる場合は、viewDidDisappear でオブザーバーを削除することをお勧めしますが、ViewWillAppear で通知のオブザーバーを追加します。

于 2013-02-27T07:34:17.287 に答える