Objective c 我是否应该将我的活动指标发布声明放在dealloc中?
我有一个很简单的问题。在下面的代码段中,由于在将活动指示器添加到子视图后启动和停止活动指示器,因此将其放置在dealoc中是否更好Objective c 我是否应该将我的活动指标发布声明放在dealloc中?,objective-c,ios,memory-management,Objective C,Ios,Memory Management,我有一个很简单的问题。在下面的代码段中,由于在将活动指示器添加到子视图后启动和停止活动指示器,因此将其放置在dealoc中是否更好 - (void)viewDidLoad { [super viewDidLoad]; // add activity indicator activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicator
- (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];
}
是的,如果您计划在任意时间在整个视图中使用activityIndicator,
dealoc
将是一个好地方。是的,如果您计划在任意时间在整个视图中使用activityIndicator,dealoc
将是一个好地方。实际上,我会在viewDidUnload中放置该版本,除了Dealoc
如果你的应用程序收到内存警告并且所有视图都被释放,那么不这样做可能会导致内存泄漏;实际上,在这种情况下,视图将在需要时再次加载,这将导致为您的活动指示器进行第二次分配,而不会释放前一个实例
请记住,根据下面的评论,在viewDidUnload中发布并不意味着您可以跳过在dealloc中发布。这有两个原因:如果您正在运行iOS
2.x没有视图卸载;此外,当视图控制器正常释放时,不会调用viewDidUnload。因此,建议在这两个地方都适用,在执行后不要忘记将ivar值设置为零
在这种情况下,最好按您正在执行的方式释放,但至少将ivar值设置为nil,否则您可能会认为您仍然拥有该对象
如果您使用保留属性并按以下方式进行分配:
Self.activityIndicator = ....
事实并非如此,但我认为在viewDidLoad中发布您在viewDidLoad中创建的内容通常是更好的做法
文档中关于viewDidUnload的内容。事实上,除了dealloc之外,我还会将该版本放在viewDidUnload中 如果你的应用程序收到内存警告并且所有视图都被释放,那么不这样做可能会导致内存泄漏;实际上,在这种情况下,视图将在需要时再次加载,这将导致为您的活动指示器进行第二次分配,而不会释放前一个实例 请记住,根据下面的评论,在viewDidUnload中发布并不意味着您可以跳过在dealloc中发布。这有两个原因:如果您正在运行iOS 2.x没有视图卸载;此外,当视图控制器正常释放时,不会调用viewDidUnload。因此,建议在这两个地方都适用,在执行后不要忘记将ivar值设置为零 在这种情况下,最好按您正在执行的方式释放,但至少将ivar值设置为nil,否则您可能会认为您仍然拥有该对象 如果您使用保留属性并按以下方式进行分配:
Self.activityIndicator = ....
事实并非如此,但我认为在viewDidLoad中发布您在viewDidLoad中创建的内容通常是更好的做法
文档中关于ViewDiUnload的内容。我会在使用时发布它,每次需要时都创建一个新的。这样,您就不会有一块分配的内存闲置着。让自己成为指示器的代表,并在指示器完成时将其释放。我会在使用时将其释放,每次需要时都创建一个新的指示器。这样,您就不会有一块分配的内存闲置着。让自己成为指示器的代理,并在指示器完成时释放它。viewDidUnload仅在内存警告的情况下调用,而不是从正在释放的VC调用。。。这两种方法都需要做。@Kendall Helmstetter Gelner:非常感谢!我忘记了这个和iOS2,并更正了我的答案。viewDidUnload仅在内存警告的情况下调用,而不是从正在释放的VC调用。。。这两种方法都需要做。@Kendall Helmstetter Gelner:非常感谢!我忘记了这个和iOS2,并更正了我的答案。