当我收到内存警告时,我收到此错误:
*** -[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;
答案 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/