0

次のコードでプッシュされた後にポップされたときに、ビューコントローラクラスのdeallocメソッドが呼び出されません。

    self.playerViewController = [[VideoPlayerViewController alloc] init];

[self.playerViewController set_video:video];

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

[self.playerViewController release];

ただし、プッシュコードを次のように変更すると、View Controllerがポップされた後、deallocが適切に呼び出されます。

    playerViewController = [[VideoPlayerViewController alloc] init];

[playerViewController set_video:video];

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

[playerViewController release];

ドット表記/自己の使い方は理解できたと思いましたが、明らかに理解できませんでした。誰かがここで問題を説明できますか?

プロパティは次のとおりです。

@property (nonatomic, retain) VideoPlayerViewController *playerViewController;

そしてここに合成があります:

@synthesize playerViewController;
4

1 に答える 1

3

あなたは2回保持しています。

self.playerViewController = [[VideoPlayerViewController alloc] init];
    ^ retain + 1                                        ^^^^^ retain + 1

ただし、リリースは1回だけです。

メモリ管理の問題を修正するには、コードを次のように変更します。

self.playerViewController = [[[VideoPlayerViewController alloc] init] autorelease];

そして、多くの人[self.foo release]が悪いスタイルだと言います。に置き換えることを検討する必要があります[foo release]

于 2011-03-27T17:44:39.787 に答える