【发布时间】:2013-01-02 15:24:56
【问题描述】:
我遇到了一个奇怪的问题.. 我想在我当前的视图中添加一个 UIViewcontroller(称为 iView)。 我通过调用来做到这一点
iView = [[KFKaraokeInfosView alloc] initWithKaraoke:karaoke NibName:@"InfosView" commingFromPlayer:NO];
iView.songTitle.text = karaoke.title;
[self.view addSubview:iView.view];
在 iView 的 viewDidLoad 中,我将它作为观察者添加到 NotificationCenter 以获得某个通知,像这样
- (void)viewDidLoad
{
[super viewDidLoad];
self.title = @"About";
if ([karaoke.styles count] == 0)
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"GetInfosOfSong" object:self.karaoke];
}
else
{
shouldSetup = YES;
}
[self.navigationController setNavigationBarHidden:NO animated:YES];
[self.navigationController.navigationBar setBarStyle:UIBarStyleBlack];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(setup) name:GetSongInfos object:nil];
[optionsTableView setBackgroundView:nil];
}
问题是当我在初始化时在 iView 上调用 autorelease 方法时,通知永远不会被捕获(因此永远不会调用 setup 方法),但如果我不为 iView 调用 autorelease,它会起作用。
我不明白这种情况下的内存管理,有人可以帮我理解吗?
【问题讨论】:
-
你能描述一下你想要做什么吗?在视图控制器包含中添加子视图?还是过渡到新观点?您能否分享代表您使用控制器所做的代码?在视图控制器之间转换时,您不应该使用
addSubview并且在执行视图控制器包含(即,使这个新控制器成为当前控制器所代表的屏幕的一部分)时,您应该执行addChildViewController和相关的包含相关调用.最重要的是,答案取决于您要做什么。 -
您能否将代码添加到您作为观察者添加通知的位置
-
我正在尝试在视图控制器容器中添加一个子视图,通过像弹出窗口一样显示新视图,我刚刚编辑了我的问题
-
你能告诉我们你正在做
addChildViewController和didMoveToParentViewController等的代码吗? -
你在 ARC 环境中吗?
标签: memory notifications autorelease ios4 addsubview