iOS - Popping UIViewController不会破坏其属性

时间:2013-09-05 14:11:55

标签: ios objective-c uinavigationcontroller automatic-ref-counting

当我从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分钟左右之后)将停止!或者至少我会更好地了解导致他们的原因...... :)感谢阅读。

2 个答案:

答案 0 :(得分:2)

NSTimer保留了它的目标,如果你传递自己(你的SubViewViewController),那么你将在视图控制器和计时器之间创建一个保留周期。

答案 1 :(得分:0)

简单地将SubViewController的视图添加到ViewController将无法正确传递事件。

您需要正确实现UIViewController子包含,如下所示:

所以你的第二个代码块应该是这样的:

[self addChildViewController:self.mySubViewController];
[self.view addSubview:self.mySubViewController.view];
[self.mySubViewController didMoveToParentViewController:self];