objective-c - 我应该将我的事件指标发布声明放在 dealloc 中吗?

标签 objective-c ios memory-management

我有一个非常简单的问题。在下面的代码中,将事件指示器放在 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/

相关文章:

ios - 身份验证失败错误 - XMPPFramework - 未授权

ios - AVFoundation - 反转 AVAsset 并输出视频文件

java - 无法使用 LeakCanary 监视 fragment (ClassCastException 错误)

objective-c - 为我的 iPhone 应用程序使用 xcode 4.2 编译链接错误

objective-c - 综合中的奇怪分配

ios - prepareForSegue 目标 TableViewController

ios - 在 Objective C 中,如何在不保存为本地文件的情况下播放 NSData 中的视频文件?

ios: UIScrollView scrollRectToVisible 不工作

C++:扩展数组的函数

c++ - IOS 删除 native 库中分配的内存