iOS内存管理 - 低内存警告和viewDidUnload

时间:2012-08-11 21:04:31

标签: ios memory-management viewdidunload

当我收到内存警告时,我收到此错误:

*** -[TheViewController_iPhone productImages]: message sent to deallocated instance

Xcode显示错误在下面的行中:

- (void)viewDidUnload
{
    [super viewDidUnload];

    [self.productTimer invalidate];
    //self.productTimer = nil;

    for(UIView *subview in [self.productImages subviews]) { //THIS LINE IS THE ERROR
        [subview removeFromSuperview];
    }
}

所以我的问题是,为什么在这一点上取消分配productImages(这是一个scrollView)?我不应该有机会抛弃它的子视图吗?

它的定义如下:

@property (weak, nonatomic) IBOutlet UIScrollView *productImages;

1 个答案:

答案 0 :(得分:0)

调用viewDidUnload时,您的视图控制器视图已被卸载。这意味着视图将不再保留视图的任何子视图。我假设productImages是视图控制器视图的子视图。在这种情况下,如果您希望在视图卸载后仍然可用,则必须将productImages声明为strong而不是weak

另一个注意事项是,在viewDidLoad中开始重复计时器以使viewDidUnload中的计时器失效是非常糟糕的做法。最好在viewDidAppear:viewWillDisappear:中执行此操作。有关详细说明http://antonholmquist.com/blog/why-you-really-shouldnt-create-repeating-nstimers-in-init-or-viewdidload/

,请参阅此博文