我面临一个奇怪的问题...
我想将一个名为iView的UIView控制器添加到我的当前视图中。
我通过调用下列代码来实现:
在iView的viewDidLoad中,我将其添加为NotificationCenter的观察者以接收特定通知,代码如下:
问题在于当我在初始化时对iView调用autorelease方法时,通知永远不会被捕获(因此setup方法从未被调用),但是如果我不对iView调用autorelease,则可以正常工作。
我不理解这种情况下的内存管理,有人能帮助我理解吗?
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
和相关的容器调用。总之,答案取决于你想要做什么。 - RobaddChildViewController
和didMoveToParentViewController
等代码吗? - Rob