0

启用 ARC 后,我有一个属性

  @property (strong, nonatomic) NSMutableArray *arr;

我将其分配为

  self.arr = [NSMutableArray array];

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

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

在我的搜索视图中,我已经覆盖了该dealloc方法,因为似乎搜索视图没有被释放:

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

当我弹出视图控制器时,它不会被调用。但是,如果我在视图控制器中将 arr 变量设为 nil,dealloc我会看到搜索视图已被删除的日志消息。

任何人都可以解释为什么内部arr的对象没有被释放,尽管视图控制器是 100% 释放的,因为我在其中有“dealloc”消息dealloc

4

1 回答 1

1

基础集合类,如NSArray,NSDictionary等,保留(或对 ARC 语言中的强引用)它们包含的对象。所以只要数组没有被释放,它引用的对象,包括你的视图实例,应该仍然在内存中。

听起来好像您之前通过未nil在控制器的dealloc方法中设置属性来泄漏数组。当一个对象将一个属性声明为strong时,它负责在其dealloc实现中取消引用以避免这种泄漏。

于 2012-05-30T15:52:10.637 回答