Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 我是否应该将我的活动指标发布声明放在dealloc中?_Objective C_Ios_Memory Management - Fatal编程技术网

Objective c 我是否应该将我的活动指标发布声明放在dealloc中?

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

我有一个很简单的问题。在下面的代码段中,由于在将活动指示器添加到子视图后启动和停止活动指示器,因此将其放置在dealoc中是否更好

- (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,并更正了我的答案。