0

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

*** -[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(它是一个滚动视图)?我不应该有机会转储它的子视图吗?

它是这样定义的:

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

1 回答 1

0

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

另一个注意事项是,开始重复计时器以viewDidLoad使它们无效是非常糟糕的做法viewDidUnloadviewDidAppear:在和中执行此操作要好得多viewWillDisappear:。有关详细说明,请参阅此博客文章http://antonholmquist.com/blog/why-you-really-shouldnt-create-repeating-nstimers-in-init-or-viewdidload/

于 2012-08-11T21:43:47.930 回答