我有一个非常简单的问题。在下面的代码中,最好将活动指示符放在dealloc中,因为我在启动并在将活动指示符添加到子视图后停止它?
- (void)viewDidLoad {
[super viewDidLoad];
// add activity indicator
activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
activityIndicator.center = CGPointMake(self.view.bounds.size.width / 2.0f, self.view.bounds.size.height / 2.0f);
activityIndicator.hidesWhenStopped = YES;
[self.view addSubview:activityIndicator];
[activityIndicator release]; // SHOULD THIS BE PLACED IN DEALLOC?
[self loadFax];
}
答案 0 :(得分:2)
实际上,除了dealloc之外,我还会将该版本放在viewDidUnload中。
如果您的应用收到内存警告且所有视图都已释放,则不这样做可能会导致内存泄漏;实际上,在这种情况下,视图将在需要时再次加载,这将导致为您的活动指示器进行第二次分配,而不会释放先前的实例。
请注意,根据下面的评论,在viewDidUnload中发布并不意味着您可以跳过在dealloc中释放。这有两个原因:如果您正在运行iOS 2.x没有viewDidUnload;此外,当您的视图控制器正常释放时,将不会调用viewDidUnload。因此建议在两个地方都做,并且不要忘记在做完之后将ivar值设置为nil。
在这种情况下,最好像你一样发布,但至少将ivar值设置为nil,否则你可能认为你仍然拥有该对象。
如果您使用了retain属性并按照以下方式进行了分配:
Self.activityIndicator = ....
情况并非如此,我认为在viewDidUnload中发布你在viewDidLoad中创建的内容通常是更好的做法。
Here有关viewDidUnload的文档。
答案 1 :(得分:1)
是的,如果您计划在随机时间在整个视图中使用activityIndicator,dealloc
将是一个不错的选择。
答案 2 :(得分:1)
我会在使用时释放它,每次需要时都会创建一个新的。这样你就没有分配的内存块无用了。让自己成为指标的代表,并在完成后将其释放。