ARC不释放为私有变量分配的内存

时间:2012-09-30 13:31:54

标签: objective-c ios5 memory-leaks automatic-ref-counting private-members

在我的一个视图控制器中,我已经定义了一个私有变量,如下所示,

@implementation CNLibraryViewController {
 CNMaterialsViewController *_materials;
}

每次重新加载视图时,我都会重新分配内存并初始化此变量,如下所示

_materials = [[CNMaterialsViewController alloc] init];
_materials.gridViewActionDelegate = self;
_materials.itemRetrieving = self.dataModel.itemRetrieval;
[_materials setSortDescriptors:_sortDescriptors];
[_materials loadItems:[results allObjects]];

CNMaterialsViewController.m我定义了一些私有变量,如下所示

@implementation CNMaterialsViewController {
    CNItemViewController *_itemViewController;
    id<CNItemViewControllerViewSetupDelegate> _itemDescriptionTileSetup;
}

所以问题是,这两个变量的保留计数在每次CNMaterialsViewController初始化时逐个增加。

无法找到任何理由。任何人都可以帮我找出问题。

作为解决方案,我在初始化nil之前将这些变量分配给CNMaterialsViewController。但我觉得这不是一个好的解决方案。

所以,请帮助我。

1 个答案:

答案 0 :(得分:0)

你必须给编译器一个关于你希望ARC如何处理ivars的提示。如果你没有将变量限定为__weak,编译器会认为你需要一个强引用,并且只要它的父代仍然存在就会保留它。

添加@mariusLAN所说的内容,您不再需要声明ivars了 - 您只需声明一个属性并在那里声明您的意图。即。

@interface CNLibraryViewController
@property (weak, nonatomic) CNMaterialsViewController *_materials;
@end