我有一个非常简单的问题。在下面的代码中,将事件指示器放在 dealloc 中是否更好,因为我在将事件指示器添加到 subview 后启动和停止它?
- (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];
}
最佳答案
其实除了dealloc,我会把release放在viewDidUnload里。
不这样做可能会导致内存泄漏,以防您的应用收到内存警告并释放所有 View ;事实上,在这种情况下, View 将在需要时再次加载,这将导致为您的事件指示器进行第二次分配,而不会释放先前的实例。
请记住,根据下面的评论,在 viewDidUnload 中释放并不意味着您可以跳过 dealloc 中的释放。这有两个原因:如果你运行的是 iOS 2.x没有viewDidUnload;此外,当您的 View Controller 正常释放时,将不会调用 viewDidUnload。所以建议在两个地方都做,并且不要忘记在完成后将 ivar 值设置为 nil。
在这种情况下,最好直接释放,但至少将 ivar 值设置为 nil,否则您可能会认为您仍然拥有该对象。
如果您使用保留属性并进行如下分配:
Self.activityIndicator = ....
情况并非如此,我仍然认为在 viewDidUnload 中释放您在 viewDidLoad 中创建的内容通常是更好的做法。
Here关于 viewDidUnload 的文档是什么。
关于objective-c - 我应该将我的事件指标发布声明放在 dealloc 中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6639583/