1

私のアプリでは、(モーダルの非表示またはナビゲーション スタック ポップによって) 割り当てが解除されたビューがあり、その後メモリ警告が表示されると、アプリがクラッシュします。

次のように、アプリの非常に早い段階でモーダルの作成/破棄を配置してテストしました。

WWebViewController *webViewController = [[WWebViewController alloc] initWithPath:@"http://www.google.com"];
        [webViewController setIsModal:YES];
        WMainNavController *navController = [[WMainNavController alloc] initWithRootViewController:webViewController];
        [self presentViewController:navController animated:YES completion:nil];

Web ビューは非常に単純です。

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self setNavigationDefaultsWithTitle:@"Loading..." withBackButton:YES withSearchButton:YES deepLinked:false];
    webView = [[UIWebView alloc] initWithFrame:[self.view bounds]];
    webView.delegate = self;
    [self.view addSubview:webView];
    [webView scalesPageToFit];
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.path]]];
    [self showNoConnectionImageIfNecessary:NO];
    // Do any additional setup after loading the view.
}

...

- (void)dealloc {
    [webView loadHTMLString:@"" baseURL:nil];
    [webView stopLoading];
    [[NSURLCache sharedURLCache] removeAllCachedResponses];
    [webView setDelegate:nil];
    webView = nil;
}

ただし、このビューを表示してから閉じるだけで、メモリ警告をシミュレートすると、次のようになります。

*** -[WMainNavController retain]: message sent to deallocated instance 0xba953c0

WMainNavController を使用せずに WWebViewController を直接呼び出すことでこれを試し、通常のナビゲーション コントローラーを使用して、単純に何かをナビゲーション スタックにプッシュしようとしました。アプリのどこかでビューをポップまたは閉じた場合、常にクラッシュします。

私は根本的に間違ったことをしていますか?閉じたりポップしたりせずにアプリを進めると、メモリの警告が正常に処理され、この画面をモーダルとして表示し、プログラムのルート ビューである画面が 1 つだけ表示されます。

必要な追加情報を提供します。誰かこのようなものを見たことがありますか?

編集 -- これは ARC の実装です。

編集 - これは、ゾンビがオンになっている私の楽器のスクリーンショットです。

ここに画像の説明を入力

私にはすべてが正常に見えます。解雇時に適切に割り当て解除されますが、何らかの理由でメモリ警告呼び出しがそのビューコントローラーにアクセスしようとしています。私は完全に途方に暮れています。

4

1 に答える 1

0

同様の問題に出くわした人には、その修正方法を実際に説明することはできませんが、問題を魔法のように消すために何をしたかを伝えることができます.

基本的に、ターゲットのビルド段階で、アプリの他の多くまたはすべての主要コンポーネントに影響を与えるカテゴリ/コントローラー/すべてをコンパイルソースから削除し始めました。次に、それに応じてコードをコメントアウトして、テストに必要な場所にアプリがビルドされるようにしました。最終的に、「問題の原因」である UIViewController カテゴリを分離し、そこからすべてのメソッドと NSString extern 変数を削除しました。

これで問題は解決しましたが、どの方法が原因であるかを突き止めようとしたときに...どれもそうではなかったことがわかりました。すべてのコメントを外して、カテゴリを開始した場所に戻ったとき、引き続き機能し、クラッシュすることはありませんでした。

今はうまくいっていますが、そもそもなぜ壊れたのか本当にわからないことに戸惑っています。

于 2013-08-28T19:52:38.633 に答える