gpt4 book ai didi

iphone - ARC奇怪的行为

转载 作者:行者123 更新时间:2023-11-29 04:37:57 24 4
gpt4 key购买 nike

启用 ARC 后,我有一个属性

  @property (strong, nonatomic) NSMutableArray *arr;

我将其分配为

  self.arr = [NSMutableArray array];

我有一个自定义对象 ERSearchView,我分配它并将其添加到 arr

  ERSearchView *SV = [[ERSearchView alloc] initWithDelegate:nil];
[arr addObject:SV];

在我的搜索 View 中,我已覆盖 dealloc方法,因为搜索 View 似乎没有被释放:

- (void)dealloc {
self.delegate = nil;
NSLog(@"deallocated search view");
}

当我弹出 View Controller 时,这不会被调用。但是如果我将 View Controller 的 dealloc 中的 arr 变量设为 nil我看到搜索 View 已被删除的日志消息。

谁能解释一下 arr 内的对象怎么可能?尽管 View Controller 已 100% 释放,但尚未释放,因为我在其 dealloc 中有“did dealloc”消息?

最佳答案

基础集合类,例如 NSArrayNSDictionary 等,保留(或者在 ARC 中具有强引用)它们所包含的对象。因此,只要数组尚未被释放,它引用的对象(包括 View 实例)就应该仍然在内存中。

听起来好像您之前没有在 Controller 的 dealloc 方法中将属性设置为 nil ,从而泄漏了数组。当对象将属性声明为 strong 时,它负责在其 dealloc 实现中清空引用,以避免这种泄漏。

关于iphone - ARC奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10818720/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com