0

我的视图控制器类的 dealloc 方法在使用以下代码推送后弹出时不会被调用:

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

[self.playerViewController set_video:video];

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

[self.playerViewController release];

但是,如果我将推送代码更改为以下内容,则在弹出视图控制器后会适当地调用我的 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

你保留了两次。

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

但你只释放一次。

要解决您的内存管理问题,您可以将代码更改为以下内容:

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

而且很多人说[self.foo release]是坏作风。您应该考虑将其替换为[foo release]

于 2011-03-27T17:44:39.787 回答