当我从UIViewController
点击UINavigationController
个实例时,我发现其属性仍然存在(NSTimers
保持计时,AVAudioPlayers
继续播放等等。我想知道我的做法有什么问题?
我将UIViewController实例以这种方式推送到UINavigationController:
- (IBAction)buttonPressed:(id)sender {
UINavigationController *nc=[self navigationController];
NewViewController *nvc=[[NewViewController alloc] init];
[nvc setNameToUse:[self nameToUse]];
[nc pushViewController:nvc2 animated:YES];
}
NewViewController有一个子视图控制器,通过NiewViewController的viewDidLoad方法添加:
self.mySubViewController=[[SubViewViewController alloc] initWithName:self.nameToUse];
self.mySubViewController.view.frame=CGRectMake(0,
0,
self.mySubViewController.view.frame.size.width,
self.mySubViewController.view.frame.size.height);
[self.view addSubview:self.mySubViewController.view];
当弹出NewViewController时,SubViewController的属性不会消失。其中一个特别是计时器,声明如下:
@property (nonatomic) NSTimer *aTimer;
对此的任何建议都会很棒。我希望通过解决这个问题,偶尔发生的崩溃(在应用程序运行45分钟左右之后)将停止!或者至少我会更好地了解导致他们的原因...... :)感谢阅读。
答案 0 :(得分:2)
NSTimer
保留了它的目标,如果你传递自己(你的SubViewViewController
),那么你将在视图控制器和计时器之间创建一个保留周期。
答案 1 :(得分:0)
简单地将SubViewController的视图添加到ViewController将无法正确传递事件。
您需要正确实现UIViewController子包含,如下所示:
所以你的第二个代码块应该是这样的:
[self addChildViewController:self.mySubViewController];
[self.view addSubview:self.mySubViewController.view];
[self.mySubViewController didMoveToParentViewController:self];