1

私は問題があります:

ExploreViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"ProfileViewController"];
vc.id_from = post.user_id;
[self.navigationController pushViewController:vc animated:YES];

ご覧のとおり、viewController をインスタンス化し、navigationController にプッシュします。vc はautoreleaseである必要がありますが、 dealloc メソッドは呼び出されません。

したがって、ビュー コントローラーをプッシュした後に解放すると、次のようになります。

ExploreViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"ProfileViewController"];
vc.id_from = post.user_id;
[self.navigationController pushViewController:vc animated:YES];
[vc release];

ビューコントローラーをポップするとdeallocメソッドが呼び出されますが、上記のコードを再度実行すると、deallocがすぐに呼び出され、他のオブジェクトがvcを見つけられないためアプリがクラッシュします。

だから解放しないとどんどんメモリが忙しくなる。

みんなありがとう!

4

2 に答える 2

1

次の場合はリリースされません。

[self.navigationController pushViewController:vc animated:YES];

には へのUINavigationController参照がありvcます。したがって、基本的には2つの参照があります。

self.navigationController + ExploreViewController *vc = 2

メソッドの最後には、次のものがあります。

self.navigationController = 1

vcからをポップするとUINavigationControllervcが解放され、deallocメソッドが呼び出されます。releaseもう1つ、所有していないオブジェクトを呼び出すべきではありません。この場合instantiateViewControllerWithIdentifier、自動解放オブジェクトを返します。

于 2013-10-02T23:39:01.470 に答える