启用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");
}
当我弹出我的视图控制器时,这不会被调用。但是如果我在视图控制器的dealloc
中找到了arr变量,我会看到日志消息,表明搜索视图已被删除。
任何人都可以解释一下arr
中的对象是如何被释放的,尽管视图控制器100%被释放,因为我在dealloc
中有“dealloc”消息?
答案 0 :(得分:1)
NSArray
,NSDictionary
等基础集合类保留(或者在ARC中强烈引用它们包含的对象)。因此,只要数组尚未解除分配,它引用的对象(包括视图实例)应该仍然在内存中。
听起来好像你之前没有通过在控制器的nil
方法中将属性设置为dealloc
来泄漏数组。当一个对象将属性声明为strong
时,它负责在dealloc
实现中对引用进行nilling以避免这种泄漏。